我是java脚本和nodejs的新手。 我正在尝试编写一个代码来检查数据库中是否已存在电子邮件,如果没有发送错误。 问题是在数据库函数结束之前,我的代码转到下一行,导致未定义的变量(emailExists)
这是我注册的代码:
app.post('/signUpWeb', function (req, res) {
var reqBody = req.body;
var email= reqBody.email;
var password= reqBody.password;
var fullName= reqBody.fullName;
var webDbInsertion = {email: email, password: password, fullName: fullName};
var emailExists= DButils.checkIfPKexists(connection, "webusersMail", "email", webDbInsertion.email);
if(emailExists == false){
DButils.insertInfoToDB(connection, "webusersMail" ,webDbInsertion);
console.log("successfull signup");
res.send("successfull signup");
}else{
console.log("signup failed, email: " + email + " allready exits");
res.send("signup failed");
}
res.end();
});
这是我的数据库调用
exports.checkIfPKexists= function(dbConnection, tableName, PK, newPK){
var query = dbConnection.query('select count(*) as mailPkCount from ' +tableName+ ' where ' +PK+ ' = ?', newPK, function (err, row, result) {
if (err) {
console.error(err);
return;
}
var count= row[0].mailPkCount;
var bool = (count > 0);
return bool;
});
};
答案 0 :(得分:0)
嗯,你看,node.JS被设计为异步,而你所要求的是不可能的,它会关闭运行服务器实例的事件循环的主线程。
我建议做的是为你的" checkIfPKexists"添加一个回调函数。函数,并以结果作为参数返回,就像在DBConnection.query中一样。然后,您将所有未初始化的代码移动到回调中。
编辑:下面是一个快速的代码示例,根据您的喜好进行调整http://pastebin.com/bEHp4bi2