我正在尝试使用快速验证器来实现验证,该验证器仅在字段实际有输入时才启动。如果为空,则应将其忽略。验证的第一部分,如果要检查该字段以检查其是否满足正则表达式要求,则第二部分是查看该值是否存在于数据库中。不允许使用具有大写字母的相同用户名的小写版本,即:Shirley和shirley被视为同一事物。
body('username')
.trim()
.custom((value, { req }) => {
var regex = /^[a-zA-Z0-9]{5,20}$/;
if (value != '' && !value.match(regex)) {
throw new Error('Username does not meet required criteria.');
}
return true;
})
.custom((value, { req }) => {
if (value !== '') {
return User.findOne({ username: new RegExp(`^${value}$`, 'i') })
.then(userDoc => {
if (userDoc) {
return Promise.reject('Username unavailable');
}
return true;
});
}
}),
如果我将用户名字段留空,我仍然会收到验证错误,告诉我“用户名不可用”
答案 0 :(得分:0)
设法使它像这样
.custom(value => {
if (value !== '') {
return User.findOne({ username: new RegExp(`^${value}$`, 'i') })
.then(userDoc => {
if (userDoc) {
return Promise.reject('Username not available');
} else {
return true;
}
})
} else {
return true;
}
})