自定义验证查询始终闪光
我想用快递验证应该只踢如果现场确实有一些输入来实现验证。如果它是空的,应该只是被忽略。验证的第一部分,如果该字段进行检查,检查其是否满足正则表达式的要求和第二检查,看是否存在于数据库中的值。以大写字母相同的用户名的小写版本不准,即:雪莉和雪莉被看作是同样的事情。
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;
});
}
}),
如果我离开的用户名字段为空我仍然得到验证错误,告诉我“用户名不可用”
回答如下:设法得到它的工作是这样
.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;
}
})