Express-validator检查MySQL是否存在电子邮件

时间:2018-11-16 19:39:46

标签: mysql node.js express express-validator

我正在使用express-validator来检查输入的req.body是否有效,并检查MySQL数据库中是否存在重复的电子邮件

这是我的代码:

  router.post(
  "/signup",
  [
    body("uemail","email is not valid")
    .isEmail()
    .normalizeEmail()
    .custom(async (email, {req} )=>{

        const queryString = "SELECT uid FROM EarlyUsers WHERE `uemail` = ?";
        return await connection.query(queryString, [email], (err, rows, fields) => {
          if (err) {
            console.log(err)
          }else {
            if (rows.length != 0) {
              return false
            } else {
              return true
            }
          }
        });

    })
    ,
    body("uname").isLength({ min: 5 })
  ],
  authControllers.signUp
);

我不知道为什么这个自定义验证器不起作用。 我试图抛出新的Error而不是返回false,但是这只会使整个事情崩溃。我真的需要帮助

2 个答案:

答案 0 :(得分:1)

要使其正常工作而不是返回false,您就拒绝承诺。

if (rows.length != 0) {
    return Promise.reject("user already exists.");
}

答案 1 :(得分:0)

我以这种方式实现了它可能对其他人有帮助,我正在使用 sequelize :)

 const User = require("../../models/User");
 body('email', 'Invalid email').exists().isEmail().trim().escape().custom(userEmail=> {
            return new Promise((resolve, reject) => {
                User.findOne({ where: { email: userEmail } })
                .then(emailExist => {
                    if(emailExist !== null){
                        reject(new Error('Email already exists.'))
                    }else{
                        resolve(true)
                    }
                })
                
            })
        }),