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は()'非同期であるあなたのためにそれをしない場合は、MUSTは、クエリを実行する前に入力をサニタイズ、 'login'関数は' ret'を返す前にコードの実行を待つことはありません。ログインメソッドにコールバックを追加する(または約束を使用する)必要があります。 – rpadovani
つまり、ログイン関数はクエリの実行が完了する前に戻ります。クエリデータベースは、非同期または非ブロッキングと言うI/O操作です。 –