我正在开发一个注册表单,我正在使用express-validator
它来验证字段,但我在验证电子邮件是否已经存在时遇到了麻烦。
我做了一个选择来检查插入的电子邮件是否已经存在,但它总是返回我该电子邮件存在。
我尝试了其他方法,但没有奏效。
这是我的post request
:
routes.post('/register', function(req,res)
{
var email = req.body.email;
var username = req.body.username;
var password = req.body.password;
var password2 = req.body.password2;
// Validation
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('email', 'Email already exists').custom(value => {
return User.findUserByEmail(value).then(function(user) {
throw new Error('this email is already in use');
})
});
req.checkBody('username', 'Username is required').notEmpty();
req.checkBody('password', 'Password is required').notEmpty();
req.checkBody('password2', 'Passwords do not match').equals(req.body.password);
var errors = req.validationErrors();
if(errors){
console.log(errors);
res.render('register',{
errors:errors
});
} else {
console.log("passed");
var newUser = {
email:email,
username: username,
password: password
};
User.createUser(newUser, function(err, User){
if(err) throw err;
console.log(User);
});
req.flash('success_msg', 'You are registered and can now login');
res.redirect('/login');
}
});
我的功能findUserByEmail
:
module.exports.findUserByEmail = function(email, callback){
var connection = db.setDB('DB1');
connection.then(result => {
var request = new mssql.Request(conn);
console.log("SELECT * FROM u_users WHERE email = '"+email+"'");
var exists = request.query("SELECT * FROM u_users WHERE email = '"+email+"'");
Promise.all([exists]).then(function(results)
{
console.log(results);
if(results[0].length == 0)
{
console.log("1");
return false;
}
console.log("2");
return true;
}).catch(function(err)
{
console.log("Error verifying email...");
console.log(err);
});
});
}
如果我这样做,它会返回一个错误Cannot read property 'then' of undefined
。
我究竟做错了什么?