自定义验证(现有电子邮件)

时间:2019-03-01 02:12:04

标签: mysql node.js express

我想使用express-validator检查电子邮件是否存在 这是我的代码:

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() });
  }

....

与async / await有关的问题是,即使返回的是true或false,验证也根本没有执行。如何解决?

1 个答案:

答案 0 :(得分:0)

您使用了错误的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() });
  }