自定义验证查询始终会触发-快速验证器

时间:2019-02-08 18:44:17

标签: node.js mongodb express mongoose

我正在尝试使用快速验证器来实现验证,该验证器仅在字段实际有输入时才启动。如果为空,则应将其忽略。验证的第一部分,如果要检查该字段以检查其是否满足正则表达式要求,则第二部分是查看该值是否存在于数据库中。不允许使用具有大写字母的相同用户名的小写版本,即: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;
                });
        }
    }),

如果我将用户名字段留空,我仍然会收到验证错误,告诉我“用户名不可用”

1 个答案:

答案 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;
        }
    })