2016-04-27 11 views
1
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 :)

+0

' 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

+2

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. –

Antwort

1

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).

Eine Arbeitscode:

module.exports = { 
    login : function(id,pass,cb){ 
     var q = "SELECT * FROM user where id = ? and pass = ?"; 

     DB.DB.query(q, [id,pass], function (error,result) { 
      if(error){ 
       console.log('not found'); 
       cb(error, 'unrecognized'); 
      } else{ 
       console.log('found'); 
       cb(null, 'validated'); 
      } 
     }); 
    } 
}; 

Die andere Datei:

router.post('/loginv', function (req,res) { 
    var id = req.body.id; 
    var pass = req.body.pass; 

    login.login(id,pass, function(err, result) { 
    if (err) { 
     console.log(err); 
     res.send('dont give up'); 
     return; 
    } 

    if (result === 'validated') { 
     res.sendfile('views/welcome.html'); 
    }else{ 
     console.log('Unknown error'); 
    } 
    }) 
}); 

ich Ihnen vorschlagen Links zu lesen geschrieben here und this question, wo Sie eine Vorstellung über Rückrufe und Versprechungen gibt.

PS: Ich weiß es nicht, die Bibliothek, die Sie für die DB verwenden, aber Sie MUST Eingang sanieren, bevor Abfragen zu tun, wenn die Bibliothek es nicht für Sie tun `

+0

es funktioniert !! Danke für deine Hilfe und die Links wirklich hilfreich .. habe versucht, dieses Problem stundenlang zu lösen – senaflix

Verwandte Themen