экспресс-валидатор проверка нескольких пользовательских проверок

Мне нужно проверить, существует ли пользователь с переданным email ИЛИ login в базе данных.

const userModel = new User();
const user = await userModel.findByLogin(req.body.email, req.body.login);

if (user) {
  req.checkBody('email', 'Email already in use').custom(value => user.email === value ? Promise.reject('Email already in use') : value);
  req.checkBody('login', 'Login already in use').custom(value => user.login === value ? Promise.reject('Login already in use') : value);
}

const errors = req.validationErrors();

findByLogin принимает email и login и возвращает существующие user или null. Проверка электронной почты работает, как и ожидалось. Но если я попытаюсь зарегистрировать пользователя с уникальным email и существующим login, это не создаст никаких ошибок (errors это false).


person loonskai    schedule 28.01.2019    source источник
comment
Пользовательский валидатор ссылка   -  person Şivā SankĂr    schedule 28.01.2019


Ответы (1)


Я просто испортил асинхронную проверку. Я не могу использовать validationErrors в моем случае, поэтому я изменил его на getValidationResult, и теперь он работает нормально. Вот результат:

const userModel = new User();
const user = await userModel.findByLogin(req.body.email, req.body.login)
if (user) {
  req.checkBody('email', 'Email already in use').custom(value => user.email !== value ? value : Promise.reject('Email already in use')).withMessage('Email already in use');
  req.checkBody('login', 'Login already in use').custom(value => user.login !== value ? value : Promise.reject('Login already in use'));
}

const errors = await req.getValidationResult();
person loonskai    schedule 28.01.2019