我想使用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,验证也根本没有执行。如何解决?
答案 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() });
}