所以我這樣做:回調函數沒有返回
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