Myślę, że będziesz chciał przemyśleć swoją aplikację w sposób bardziej podobny do węzła (tj. taki, który rozpoznaje, że wiele/większość rzeczy dzieje się asynchronicznie, więc zwykle nie "powracasz" z funkcji takiej jak ta, ale wykonujesz wywołanie zwrotne z to.Nie jestem pewien, co planujesz uzyskać z node-mysql, ale prawdopodobnie użyłbym zwykłego modułu mysql.Poniższy kod nadal najprawdopodobniej nie jest do końca tym, czego chcesz, ale mam nadzieję, że pomyślisz o tym poprawnie.
Zauważ, że użycie 'return' poniżej tak naprawdę nie zwraca wyniku (samo wywołanie zwrotne nie powinno niczego zwracać, a zatem jest to jak zwracanie undefined. Instrukcje return są tam, więc wychodzisz z funkcji, co oszczędza wiele żmudnych, jeśli/ inne bloki.
Mam nadzieję, że to pomoże, ale sugeruję przyjrzenie się różnym projektom węzłów na github, aby lepiej wyczuć asynchroniczny charakter pisania dla węzła.
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);
}
});
});
};