Ik denk dat je je app wilt heroverwegen op een meer knooppuntachtige manier (d.w.z. een die erkent dat veel/de meeste dingen asynchroon gebeuren, dus je "komt" meestal niet terug van een functie als deze, maar doet een callback van Ik weet niet zeker wat je van node-mysql wilt halen, maar ik zou waarschijnlijk gewoon de gewone mysql-module gebruiken. De volgende code is hoogstwaarschijnlijk nog niet helemaal wat je wilt, maar zal je hopelijk wel aan het denken zetten.
Merk op dat het gebruik van 'return' hieronder niet echt een resultaat retourneert (de callback zelf zou niets moeten retourneren, en dus is het alsof je undefined retourneert. De return-statements zijn er, dus je verlaat de functie, wat een hoop vervelend als / anders blokkeert.
Ik hoop dat dit helpt, maar ik raad aan om naar verschillende node-projecten op github te kijken om een beter gevoel te krijgen voor de asynchrone aard van schrijven voor node.
function validate(username, password, callback){
var connection = mysql.createConnection({ user:'foo',
password: 'bar',
database: 'test',
host:'127.0.0.1'});
connection.connect(function (err){
if (err) return callback(new Error('Failed to connect'), null);
// if no error, you can do things now.
connection.query('select username,password from usertable where username=?',
username,
function(err,rows,fields) {
// we are done with the connection at this point), so can close it
connection.end();
// here is where you process results
if (err)
return callback(new Error ('Error while performing query'), null);
if (rows.length !== 1)
return callback(new Error ('Failed to find exactly one user'), null);
// test the password you provided against the one in the DB.
// note this is terrible practice - you should not store in the
// passwords in the clear, obviously. You should store a hash,
// but this is trying to get you on the right general path
if (rows[0].password === password) {
// you would probably want a more useful callback result than
// just returning the username, but again - an example
return callback(null, rows[0].username);
} else {
return callback(new Error ('Bad Password'), null);
}
});
});
};