繁体   English   中英

express-validator :仅显示一个字段的一个验证错误消息

[英]express-validator : show only one validation error message of a field

我是 expressjs 和express-validator的新手。 我有一个注册表单,用户必须提交电子邮件地址(包含其他字段)。 我对带有“express-validator”的电子邮件字段的验证规则看起来像

req.checkBody('email', 'Email field is required').notEmpty().isEmail().withMessage('Invalid email address');

我正在使用 jade 打印出类似的错误

  if errors.length  
    .alert.alert-danger
      a.close(href='#', data-dismiss='alert', aria-label='close') ×
      for error in errors
         div=error.msg 

上面的代码打印出与字段相关的所有表单错误,现在的问题是,如果电子邮件字段为空,则会显示两条错误消息“电子邮件字段是必需的”和“电子邮件地址无效”

仅当电子邮件不为空时,我才想评估第二个验证 isEmail()。 如果为空,则只需要显示一条错误消息“需要电子邮件字段”。 有什么解决办法吗?

既然 isEmail() 似乎已经验证了字符串不为空,为什么不去掉 notEmpty() 呢? 如果电子邮件留空,“无效的电子邮件地址”足以提供错误消息。

或一一显示错误

div=errors[0].msg

而不是

for error in errors
   div=error.msg

你可以在 express-validator 中注册一个自定义验证器来做你想做的事,但为什么要让你的生活复杂化:)

这对我有用。 试试这个

req.getValidationResult().then(result=> {

 var errors = result.useFirstErrorOnly().array();

});
  const errors = validationResult(req);
  if (errors.isEmpty()) {
    return next();
  }
  const extractedErrors = []
  errors.array({ onlyFirstError: true }).map(err => extractedErrors.push({ [err.param]: err.msg }));

  return res.status(422).json({
    errors: extractedErrors,
  });

试试这个.mapped()

返回: 一个对象,其中键是字段名称,值是验证错误

以对象的形式获取每个失败字段的第一个验证错误。

const errors = validationResult(req).mapped()

使用保释()方法

app.post('/', [
  check('username')
    .isEmail()
    .bail()
    // If username is not an email, checkBlacklistedDomain will never run
    .custom(checkBlacklistedDomain)
    .bail()
    // If username is not an email or has a blacklisted domain, checkEmailExists will never run
    .custom(checkEmailExists);
]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM