我正在使用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,但是这只会使整个事情崩溃。我真的需要帮助
答案 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)
}
})
})
}),