アプリをよりノードのような方法に再考する必要があると思います(つまり、多くの/ほとんどのことが非同期で発生することを認識するため、通常はこのような関数から「戻る」のではなく、からのコールバックを実行しますnode-mysqlから何を取得する予定かはわかりませんが、おそらくプレーンmysqlモジュールを使用するだけです。次のコードは、完全に必要なものではない可能性が高いですが、正しく考えてもらうことができれば幸いです。
以下の「return」の使用は実際には結果を返さないことに注意してください(コールバック自体は何も返さないため、undefinedを返すようなものです。returnステートメントがあるので関数を終了します。これにより、面倒なif/を大幅に節約できます。それ以外の場合はブロックします。
これがお役に立てば幸いですが、ノードの書き込みの非同期性をよりよく理解するために、githubでさまざまなノードプロジェクトを確認することをお勧めします。
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);
}
});
});
};