私は NodeJS を初めて使用します (duh!)。関数が非同期で実行されることはわかっていますが、この現象の原因はまだわかりません。
Express モジュールと mysql モジュールを使用しており、リクエスト パラメータに基づいて SQL クエリを実行しようとしています。これは、サーバーが特定の URL で 2 つの要求パラメーター (user と passwd) をリッスンすることにより、データベース内のユーザーを検索する単純な検証 API 機能であると想定されています。
問題は、クエリで要求パラメーターを使用してこれを行うと、SQL クエリが常に結果として空のオブジェクトを返すことです。
ただし、クエリをハードコーディングして app.get(...) の外で実行すると、目的の結果が得られます。しかし、リクエストに応じてオンデマンドで動作させるにはこれが必要です...
(後でGETリクエストを使用するつもりはありません。この例はデバッグ用です:))
ここで何が間違っていますか?
これが私のコードです:
// Server and Mysql setup here
var app = require('express').createServer(),
SERVER_PORT = 8080;
var Client = require('mysql').Client,
client = new Client(),
...
// User, password and database setup here, cropped out from this example //
// ...
function validateUser(user, passwd, callback) {
client.query('SELECT date FROM '+CUSTOMERS_TABLE+' WHERE email="'+user+'" AND passwd="'+passwd+'";',
function selectCb(err, results, fields) {
if (err) {
throw err;
}
console.log(fields);
callback(results);
});
}
app.get('/', function(req, res){
var url_parts = url.parse(req.url, true);
var query = url_parts.query;
if((typeof query[REQ_PARAM_USER] != 'undefined' && typeof query[REQ_PARAM_PASSWD] != 'undefined')
&& (query[REQ_PARAM_USER] != '' && query[REQ_PARAM_PASSWD] != '')) {
validateUser(REQ_PARAM_USER, REQ_PARAM_PASSWD, function(results) {
console.log(results);
});
}
res.end("End")
});
app.listen(SERVER_PORT);
console.log('Server running at port '+SERVER_PORT);
ところで、console.log(fields) は正しいフィールドを出力します! しかし、なぜ結果が出ないのでしょうか?