所以我这样做:回调函数没有返回
module.exports.checkEmailInUse = (email) => {
connection.query('SELECT `id` FROM `users` WHERE email = ?',
[
email
],
function(err, rows, fields) {
console.log(rows.length);
if(rows.length > 0){
return true;
}
else{
return false;
}
}
);
}
此表是空白的。我得到0返回,因为它应该。但在这个其他文件,我这样做:
if(Database.checkEmailInUse(email)){
callback({success: "false", message: "Email Already In Use"});
return false;
}
这不应该引发,因为这将返回0 ....但它确实。
但现在,如果我回到他们像字符串:
return "true";
和:
if(Database.checkEmailInUse(email) == "true")
它将工作。
这是我第一个使用NodeJS的项目,我在这里难倒了。
编辑 答案。谢谢qqilihq! :
module.exports.checkEmailInUse = (email) => {
var queryTheEmail = (email, callback)=>{
connection.query('SELECT `id` FROM `users` WHERE email = ?',
[
email
],
function(err, rows) {
if (err) {
callback(err,null);
}
else{
callback(null,rows);
}
}
);
}
queryTheEmail(email, (err, rows) => {
if (err) {
console.error('SQL error: ', err);
return false;
}
if(rows.length > 0){
return true;
}
else{
return false;
}
});
}
问题是,你的'checkEmailInUse'函数实际上什么都没有返回。数据库查询异步发生:检查函数的嵌套。你需要重构这个,使用回调或者返回promise。无论哪种方式,这对布隆班特别具有*无关。 – qqilihq
专业题外小贴士:如果你发现自己做了一个返回true否则它可能是不必要的代码。你的'if(rows.length> 0)...'可以被'return rows.length> 0'替代' –
@LiamGray这就是我最初的做法,并且自从lol以来一直在对这个问题进行垃圾处理。 – user2287474