【问题标题】:How to validate two fields that should be equal in Node.js and Express?如何验证 Node.js 和 Express 中应该相等的两个字段?
【发布时间】:2017-08-10 06:55:04
【问题描述】:

我第一次使用 express-validator,但我找不到断言两个字段是否相等的方法(如果可以做到的话)。

示例:提交包含 2 个电子邮件地址(一个作为标准确认)的表单。我想检查字段是否匹配。

我自己找到了一个可行的解决方法,但我想知道我是否只是在做一些不必要的事情。下面是代码(数据通过 ajax 调用而来):

//routes.js

function validator(req, res, next) {

  req.checkBody('name', 'cannot be empty').notEmpty();
  req.checkBody('email', 'not valid email').isEmail();

  var errors = req.validationErrors(); // up to here standard express-validator

  // Custom check to see if confirmation email matches.

  if (!errors) errors = [];
  if (email !== email_confirm){
    errors.push({param: 'email_confirm', msg: 'mail does not match!', value: email_confirm})
  }

  if (errors.length > 0) {
    res.json({msg: 'validation', errors:errors}); // send back the errors
  }
  else {
    // I don't want to insert the email twice in the DB
    delete req.body.email_confirm
    next(); // this will proceed to the post request that inserts data in the db
  }
};

所以我的问题是:在 express-validator 中是否有本地方法来检查是否 (email===email_confirm)?如果没有,是否有更好/更标准的方法来做我上面所做的事情?一般来说,我对 node/express 很陌生。谢谢。

【问题讨论】:

  • 表单验证可以在发送请求之前在客户端javascript本身上完成。
  • @BharathvajGanesan 感谢您的评论。我考虑过在客户端验证电子邮件是否相等,但由于我已经在服务器端使用 express-validator 进行验证,所以我只想将它们放在一起。
  • K 很好 @Tommy... 还有其他用于 express 的表单验证器试试这个灵活的 [www.npmjs.com/package/express-form-handler] 它类似于 jquery form-validator,你可以编写自己的规则和策略

标签: javascript node.js validation express


【解决方案1】:

要使用 express-validator 版本 4 中的新检查 API 实现此目标,您需要创建一个自定义验证器函数以便能够访问请求,如下所示:

router.post(
    "/submit",
    [
    // Check validity
    check("password", "invalid password")
        .isLength({ min: 4 })
        .custom((value,{req, loc, path}) => {
            if (value !== req.body.confirmPassword) {
                // trow error if passwords do not match
                throw new Error("Passwords don't match");
            } else {
                return value;
            }
        })
    ],
    (req, res, next) => {
        // return validation results
        const errors = validationResult(req);

        // do stuff
    });

【讨论】:

    【解决方案2】:

    由于express-validatorexpress 的中间件validator.js,你可以使用equals()

    req.checkBody('email_confirm', 'mail does not match').equals(req.body.email);
    

    【讨论】:

    • 谢谢!我确定我在解决方法之前尝试使用 equals,但我一定在语法上犯了一些错误,因为它不起作用。但是,现在可以了。简单干净谢谢!
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2015-12-06
    • 2019-03-24
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多