如何使用"等于"在快递验证器?

时间:2018-05-29 20:08:22

标签: node.js express express-validator

我试图断言2个密码匹配:

app.post('/users/signup', [
    check('email', 'email is not valid')
      .isEmail()
      .trim(),
    check('password')
      .isLength({ min: 4 })
      .withMessage('password must be at least 4 characters')
      .equals('passwordConfirmation'),
  ], (req, res) => {
    ...

我正在使用equals,但它正在检查password是否实际上等于字符串'passwordConfirmation'而不是值req.body.passwordConfirmation

1 个答案:

答案 0 :(得分:0)

你不能按照你想要的方式使用它。

我猜测,在您的表单或您的请求正文中,您有两个字段:

  • password
  • confirmPassword

您可以通过以下方式访问:

  • req.body.password
  • req.body.confirmPassword

如果这是正确的,那么您将无法使用check API验证两者是否相同,因为您无法在某个时间点访问req对象

您可以做的是围绕check编写包装中间件:

const check = require('express-validator/check')

exports.verifyPasswordsMatch = (req, res, next) => {
    const {confirmPassword} = req.body

    return check('password')
      .isLength({ min: 4 })
      .withMessage('password must be at least 4 characters')
      .equals(confirmPassword)
}

然后像这样使用包装器:

app.post('/users/signup', [
    check('email', 'email is not valid')
      .isEmail()
      .trim(),
    verifyPasswordsMatch,
  ], (req, res) => {
    ...

以上是未经测试的,但希望能够展示您需要做的事情。