【问题标题】:How to get validation errors with expres-validator?如何使用 express-validator 获取验证错误?
【发布时间】:2019-04-30 22:02:11
【问题描述】:

我刚刚开始学习 express-validator。我已经阅读了 express-validator 的文档,但我的问题可能在这些文档中有一个我不完全理解的答案。 我想检查一些值,但如果值与验证不匹配,我不知道如何获取错误。

const { check, validationResult } = require('express-validator/check');
const router = require("express").Router();

router.post("/", (req, res, next)=>{
    // validate user input
    const username = req.body.username;
    const email = req.body.email;
    const password = req.body.password;

    check("username")
    .not().isEmpty().withMessage("Username must not be empty!");
    check("email")
    .not().isEmpty().withMessage("Email must not be empty!");
    check("password")
    .not().isEmpty().withMessage("Password must not be empty!");

    //Get check results
});
module.exports = router;

另外,check() 是返回一个承诺还是同步运行? 而且,在文档中有:

app.post('/user', [
  check('username').isEmail()], (req, res) => {
  const errors = validationResult(req);
  ...
  }

我尝试过validationResult(req),但它给了我一个具有一些功能的对象,其中只有isEmpty()true,而其他功能是weather false、null 或undefined。为什么post方法中有一个数组?

提前谢谢你

【问题讨论】:

    标签: javascript node.js validation express express-validator


    【解决方案1】:

    来自docs的示例:

    const { check, validationResult } = require('express-validator/check');
    
    app.post('/user', [
      // username must be an email
      check('username').isEmail(),
      // password must be at least 5 chars long
      check('password').isLength({ min: 5 })
    ], (req, res) => {
      // Finds the validation errors in this request and wraps them in an object with handy functions
      const errors = validationResult(req);
      if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.array() });
      }
    
      User.create({
        username: req.body.username,
        password: req.body.password
      }).then(user => res.json(user));
    });
    

    如果你想让你的代码工作,你必须遵循相同的结构。

    如果validationResult 发现任何错误,您的服务器将响应:

    {
      "errors": [{
        "location": "body",
        "msg": "Invalid value",
        "param": "username"
      }]
    }
    

    在您的情况下,您可以直接复制此文档示例中的代码,它会正常工作。

    【讨论】:

    • 但是我不明白为什么post方法中有一个数组
    • 如果你想知道这一点,你必须向维护 Express 的人提出这个问题,这只是他们做出的决定。
    猜你喜欢
    • 2018-07-23
    • 2020-01-23
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    相关资源
    最近更新 更多