0

我使用 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
);

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

4

2 回答 2

2

为了让它正常工作而不是返回 false,你拒绝了 Promise。

if (rows.length != 0) {
    return Promise.reject("user already exists.");
}
于 2018-11-18T08:57:10.107 回答
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)
                    }
                })
                
            })
        }),
于 2020-12-18T19:36:56.893 回答