Экспресс-проверка, пользовательская асинхронная проверка - PullRequest
0 голосов
/ 09 декабря 2018

Итак, я провел довольно много исследований по этому вопросу, и у меня возникли некоторые проблемы.

router.post('/register', async (req, res) => {
const newUser = await usersDb();
// Define the user
const email = req.body.email;
const username = req.body.username;
const password = req.body.password;
const confirmPassword = req.body.confirmPassword;

// Start user already exist check
let userNameCheck = await newUser.findOne({ 'username': username});

req.check('email', 'Email is not valid.').isEmail()
  .custom(async value => {
    let emailCheck = await newUser.findOne({ 'email': value });
    console.log(emailCheck);
    console.log('Hmmm')
    if (emailCheck !== null) {
      return true;
    } else {
      return false;
    }
  }).withMessage('Email is already in use.');

//req.check('username', 'Username is required.').notEmpty();    
req.check('password', 'Password is required.').notEmpty();
req.check('confirmPassword', 'Confirm password is required.').notEmpty();

// Get errors
let errors = await req.validationErrors();
if (errors) {
   console.log(errors);
   res.render('index', {
    errors: errors
  });
} else {     
  console.log('Still bad');
}
});

У меня проблемы с проверкой электронной почты.Кажется, он работает по большей части, но не возвращает ошибку.Я знаю, что использую тот же адрес электронной почты, и он тянет его правильно.Но проверка не работает.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 августа 2019

Да, Уильям, ваш ответ полностью верен. Я просто хотел бы добавить причину для любых других любопытных умов.

Если мы используем asyncFunction в пользовательском валидаторе, мы должны вернуть объект Promise.Когда валидация работает, нам ничего не нужно из функции, следовательно, работают недопустимые случаи, но return false не будет работать, но Promise.reject() будет.

Кроме того, вы можете использовать Promise.resolve(), чтобы полностью исправить свой код.

0 голосов
/ 09 декабря 2018

Хорошо, на этот раз у меня все получилось, по-настоящему:

req.check('email', 'Email is not valid.').isEmail()
  .custom(async value => {
    let emailCheck = await newUser.findOne({ 'email': value });
    if (emailCheck !== null) {
      console.log('User Exists');
      return Promise.reject();
    }
}).withMessage('Email is already in use.');

И:

// Get errors
const errors = await req.getValidationResult();
console.log(errors.mapped())
if (!errors.isEmpty()) {
   res.render('index', {
    errors: errors.mapped()
  });
} else {     
  console.log('Still bad');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...