пользовательская проверка (существующая электронная почта) - PullRequest
0 голосов
/ 01 марта 2019

Я хотел использовать экспресс-валидатор, чтобы проверить, существует ли электронная почта, вот мой код:

router.post('/', [
  check('username', 'Min 5 chars, Max 20').isLength({ min: 5, max: 20 }),
  check('email').custom(async value => {
      const db = require('../db');
return await db.query('SELECT id FROM users WHERE email=?', [value], function (err, results, fields) {
        if (results.length > 0) {
              return false;
        } else { return true; }
      })
  }).withMessage('Email already exists'),
], function(req, res, next) {

  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

....

Проблема с асинхронностью / ожидание, что проверка не прошлавыполнить вообще, даже если возвращение истинно или ложно.Как это исправить?

1 Ответ

0 голосов
/ 01 марта 2019

Вы используете плохие async/await команды.И если честно, они вам здесь не нужны.

router.post('/', [
  check('username', 'Min 5 chars, Max 20').isLength({ min: 5, max: 20 }),
  check('email').custom(value => {
      const db = require('../db');
      return new Promise((resolve, reject) => {
          db.query('SELECT id FROM users WHERE email=?', [value], function (err, results, fields) {
             if (err)
                reject(err)
             if (results.length>0)
                reject(new Error('Email Already exists'))
             resolve()
          })
       })

  }),
], function(req, res, next) {

  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...