router.post('/loginv', function (req,res) {
var id = req.body.id;
var pass = req.body.pass;
if(login.login(id,pass)=='validated'){
res.sendfile('views/welcome.html');
}else{
res.send('dont give up');
}
var result = login.login(id,pass);
console.log(result);
});
module.exports={
login : function(id,pass){
var q = "SELECT * FROM user where id = ? and pass = ?";
var ret = 'default';
DB.DB.query(q, [id,pass], function (error,result) {
if(error){
console.log('not found');
ret = 'unrecognized';
} else{
console.log('found');
ret = 'validated';
}
});
return ret;
}};
的console.log:變量沒有被覆蓋的NodeJS
GET /login 304 4.028 ms - -
default
POST /loginv 200 40.558 ms - 12
found
found
,你可以看到RET從下面的代碼返回的值不被改變,雖然它遵循的程序功能正常.. 我是新來的節點js和js的東西,所以任何意見和建議一定會有所幫助thx :)
'DB.query()'是異步,所以'login'函數在返回'ret'之前不會等待代碼的執行。您需要爲登錄方法添加回調(或使用承諾) – rpadovani
換句話說,在完成查詢之前,登錄函數會返回。查詢數據庫是一種異步或非阻塞的I/O操作。 –