YUP Req.Body在中间件函数中未定义

ybzsozfc  于 2022-09-18  发布在  Java
关注(0)|答案(1)|浏览(171)

我正在尝试使用YUP验证来自我的Express端点的数据。在看了几个教程之后,我遇到了以下错误。

如果我尝试在中间件中验证我的数据,它总是返回一个错误。在记录req.body之后,我注意到它是未定义的

下面是我的以下方法(都在不同的文件中)。我的架构如下所示:

  1. const loginSchema = yup.object({
  2. body: yup.object({
  3. email: yup.string().email().required(),
  4. password: yup.string().min(3).max(16).required()
  5. })
  6. })
  7. module.exports = loginSchema;

我的验证中间件函数如下所示:

  1. const validation = (schema) => async (req, res, next) => {
  2. console.log(JSON.stringify(req.body)) // is undefined
  3. try {
  4. await schema.validate({
  5. body: req.body
  6. });
  7. return next();
  8. } catch(err) {
  9. res.status(400).json({err})
  10. }
  11. };
  12. module.exports = validation;

我的exts.js后端中的端点如下所示:

  1. // validation and schemas has been imported
  2. router.post("/login", validation(schemas), (req, res) => {
  3. // some code
  4. })

如果我在发送POST请求后尝试验证我的数据,它总是返回以下内容:

  1. {
  2. "err": {
  3. "value": {
  4. "body": {}
  5. },
  6. "path": "body.password",
  7. "type": "required",
  8. "errors": [
  9. "body.password is a required field"
  10. ],
  11. "params": {
  12. "path": "body.password"
  13. },
  14. "inner": [],
  15. "name": "ValidationError",
  16. "message": "body.password is a required field"
  17. }
  18. }

有没有人有同样的问题?因为我没有发现任何关于这种错误的东西。我使用了这个模式:https://dev.to/franciscomendes10866/schema-validation-with-yup-and-express-js-3l19

svujldwt

svujldwt1#

您需要使用正文解析器包来读取‘req.body’。

安装package并在您的server.js文件中使用它。

NPM安装Body-Parser

  1. import bodyParser from "body-parser";
  2. app.use(bodyParser.json());
  3. app.use(bodyParser.urlencoded({ extended: true }));

相关问题