Javascript 快速验证程序:仅显示字段的一条验证错误消息
我是expressjs和的新手。我有一个登记表和用户必须提交电子邮件地址(与其他领域)。“express validator”电子邮件字段的验证规则如下所示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
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);
]);