2014-10-12 99 views
0

我寫一個簡單的腳本來從表中檢索密碼和node.js中這裏驗證是腳本節點sqlite3的異步回調

module.exports = { 
    login: function (email, pass) { 
    var sqlite3 = require('sqlite3').verbose(); 
    var db = new sqlite3.Database('test.db'); 

    db.get("SELECT password FROM users WHERE user_email = ?", email, function(err, row) { 
     if (err !== null) { 
     console.log("An error has occured"); 
     return "error"; 
     } else if(row.password === pass) { 
     console.log("success"); 
     return "success"; 
     } else { 
     console.log("Incorrect password"); 
     return "failure"; 
     } 
    }); 
    } 
}; 

控制檯日誌語句時,如果其他情況下是正確的評估。但是返回值是未定義的。 我不明白爲什麼返回值是未定義的,如果記錄正確完成。

+0

可能重複[爲什麼是我的變量不變後,我修改函數裏面? - 異步代碼引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – 2014-10-12 15:32:18

回答

1

您無法從回調中返回值,因爲這樣做毫無意義。你有一個回調傳遞給你的login()功能,並呼籲與(err, result)db.get()回調中:的

module.exports = { 
    login: function (email, pass, cb) { 
    var sqlite3 = require('sqlite3').verbose(); 
    var db = new sqlite3.Database('test.db'); 

    db.get("SELECT password FROM users WHERE user_email = ?", 
      email, 
      function(err, row) { 
     if (err) 
     return cb(err); 

     cb(null, row.password === pass); 
    }); 
    } 
};