我是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()。如果为空,则只需显示一条错误消息'电子邮件字段是必需的'。这有什么解决方案吗?
答案 0 :(得分:1)
这对我有用。试试这个
req.getValidationResult().then(result=> {
var errors = result.useFirstErrorOnly().array();
});
答案 1 :(得分:0)
由于isEmail()似乎已经验证字符串不为空,为什么不放弃notEmpty()? '电子邮件地址无效'如果电子邮件留空,则足以提供错误消息。
或者用
逐个显示错误div=errors[0].msg
而不是
for error in errors
div=error.msg
您可以在快速验证器中注册一个自定义验证器,它可以满足您的需求,但为什么会让您的生活变得复杂:)
答案 2 :(得分:0)
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,
});
答案 3 :(得分:0)
尝试一下 .mapped()
返回:一个对象,其中键是字段名称,值是验证错误
以对象的形式获取每个失败字段的第一个验证错误。
const errors = validationResult(req).mapped()
答案 4 :(得分:0)
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);
]);