Javascript 快速验证程序:仅显示字段的一条验证错误消息

Javascript 快速验证程序:仅显示字段的一条验证错误消息,javascript,node.js,express,Javascript,Node.js,Express,我是expressjs和的新手。我有一个登记表和用户必须提交电子邮件地址(与其他领域)。“express validator”电子邮件字段的验证规则如下所示 req.checkBody('email', 'Email field is required').notEmpty().isEmail().withMessage('Invalid email address'); 我用jade打印错误,比如 if errors.length .alert.alert-danger

我是expressjs和的新手。我有一个登记表和用户必须提交电子邮件地址(与其他领域)。“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 
上面的代码打印出与某个字段相关的所有表单错误,现在的问题是,如果电子邮件字段为空,它将显示两条错误消息“email field is required”和“Invalid email address”

我只想在电子邮件不是空的情况下评估第二个验证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).mapped()


似乎OP在这里找到了tehir的答案:
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);
]);