[英]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.