我正在使用快遞框架爲node.js中的網站編寫登錄。但是,代碼以奇怪的順序執行,我不知道如何解決它。下面是相關的代碼的簡化版本:使用快遞在node.js中編寫登錄
app.post('/login', function(req, res){
var login_error;
if (!req.session.username) { //if no one is logged in
if (req.body.user != undefined && req.body.pass != undefined) {
client.query('USE data', function(error, results) {}
});
client.query('SELECT id FROM user WHERE username=? AND password=?',[reg.body.user, req.body.pass],
function(err, results,fields) {
if (err || results.length == 0) {
login_error=1;
console.log('a '+login_error); //LINE A
}
});
}
console.log('b '+login_error); //LINE B
if (login_error == undefined) {
req.session.username=req.body.user;
}
client.end();
}
res.render('login', {
user: req.session.username,
login_error: login_error
});
頁面總是與login_error =未定義的渲染,即使用戶名/密碼組合是不是在數據庫中。在這種情況下,LINE A正在打印login_error = 1,但LINE B正在打印login_error = undefined。此外,LINE B在LINE A之前打印,即使它稍後出現。我不確定這裏發生了什麼事。
直到'function(req,res)'主體完成後,纔會發生回調函數(err,results,fields)'。 – 2012-01-29 21:58:52