检查电子邮件是否在自定义快速验证器的数据库中。 (节点,表达,mysql)

Check if email is in database in custom express-validator. (node, express, mysql)

//Update the user's email endpoint.
apiRouter.post('/update-email', [
check('newEmail')
    .isEmail().withMessage('Please Insert a valid Email')
    .custom(newEmail=> {
        db.query(`SELECT user_id FROM users WHERE email = ?`, newEmail,(err, res)=> {
            if(res.length > 0) throw new Error('Email is already registered.');
        });
    })
], (req, res)=> { 
    const errors = validationResult(req);
if (!errors.isEmpty()) {
    return res.status(422).json(errors);
} else {
    const newEmail = req.body.newEmail;
    const id = req.body.id;
    userCRUDfuncs.updateEmail(id, newEmail, db, (err=> {
        if(!err) { 
            return res.status(201).send();
        } else {
            return res.status(404).send();
        }
    }));
}
})

此代码returns出现以下错误:"throw err; // Rethrow non-MySQL errors".

我尝试过使用回调和 Promises,但我永远无法将错误抛出到查询函数之外。我找不到一种方法来通知外部函数抛出错误。 我真的很感谢你在这方面的帮助。 提前致谢。

创建您自己的自定义 验证器并将您的查询包装在一个 promise

  .custom((value, {req}) => {
    return new Promise((resolve, reject) => {
     db.query(`SELECT user_id FROM users WHERE email = ?`, req.body.email,(err,res)=> 
  {
    if(err) {
      reject(new Error('Server Error')
    }

    if(res.length > 0) {
      reject(new Error('E-mail already in use'))
    }

    resolve(true)

    });

  });

})