我正在尝试使用YUP验证来自我的Express端点的数据。在看了几个教程之后,我遇到了以下错误。
如果我尝试在中间件中验证我的数据,它总是返回一个错误。在记录req.body之后,我注意到它是未定义的。
下面是我的以下方法(都在不同的文件中)。我的架构如下所示:
const loginSchema = yup.object({
body: yup.object({
email: yup.string().email().required(),
password: yup.string().min(3).max(16).required()
})
})
module.exports = loginSchema;
我的验证中间件函数如下所示:
const validation = (schema) => async (req, res, next) => {
console.log(JSON.stringify(req.body)) // is undefined
try {
await schema.validate({
body: req.body
});
return next();
} catch(err) {
res.status(400).json({err})
}
};
module.exports = validation;
我的exts.js后端中的端点如下所示:
// validation and schemas has been imported
router.post("/login", validation(schemas), (req, res) => {
// some code
})
如果我在发送POST请求后尝试验证我的数据,它总是返回以下内容:
{
"err": {
"value": {
"body": {}
},
"path": "body.password",
"type": "required",
"errors": [
"body.password is a required field"
],
"params": {
"path": "body.password"
},
"inner": [],
"name": "ValidationError",
"message": "body.password is a required field"
}
}
有没有人有同样的问题?因为我没有发现任何关于这种错误的东西。我使用了这个模式:https://dev.to/franciscomendes10866/schema-validation-with-yup-and-express-js-3l19
1条答案
按热度按时间svujldwt1#
您需要使用正文解析器包来读取‘req.body’。
安装package并在您的server.js文件中使用它。
NPM安装Body-Parser