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:Variable wird nicht überschrieben NodeJS
GET /login 304 4.028 ms - -
default
POST /loginv 200 40.558 ms - 12
found
found
wie man sehen kann der Wert ret aus dem folgenden Code zurückgegeben wird, nicht geändert wird, obwohl sie das Verfahren von folgt die Funktion richtig .. ich bin neu zu Knoten js und js Sachen, so dass Kommentare und Hinweise werden auf jeden Fall hilfreich sein thx :)
' DB.query() ist async , so 'Login' Funktion warten Sie nicht die Ausführung des Codes vor der Rückkehr' ret'. Sie müssen der Anmeldemethode einen Rückruf hinzufügen (oder eine Zusage verwenden). – rpadovani
Mit anderen Worten, die Anmeldefunktionen werden vor der vollständigen Ausführung der Abfrage zurückgegeben. Die Abfrage der Datenbank ist eine E/A-Operation, die asynchron oder nicht blockierend ist. –