4

einaros/ws上に構築されたノード ws サーバーを使用しています。そのサーバーはデータベースにクエリを送信する必要があります。そのために私はfelixge/node-mysqlを使用しています。

ユーザーがサーバーに接続するとき、クライアントがまだデータベースに存在するかどうかを確認する必要があります。

興味深いコードは次のとおりです。

console.log("client-liste ist leer");
var query = "SELECT name FROM spieler WHERE name='"+id+"' AND passwort='"+passwort+"'";
var result = queryToDatabase(query);
console.log(getTime() + "DB-Result Abfrage: " + result);

そして、クエリが実行されるコード:

var mysql = require('mysql');
var mysqlConnection = mysql.createConnection({
    host: dbHost,
    user: dbUser,
    password: dbPassword,
});

function queryToDatabase(anfrage) {
    mysqlConnection.connect();

mysqlConnection.query("USE " + db, function(err, rows, fields) {
    if (err) throw err;
});

mysqlConnection.query(anfrage, function(err, rows, fields) {
        if (err) throw err;
        console.log("rows as String - " + JSON.stringify(rows));
        return rows;

    });

    mysqlConnection.end();
}

コンソールのログは次のとおりです。

client-listeist leer
3.8.2012 - 15:29:0 - DB-Result Abfrage: 未定義の
行が文字列として - [{"name":"lukas"}]



関数が未定義を返す理由を誰かが理解していますか? また、単純な setTimout で Database-Connection が終了するのを待ってみましたが、何も変わりませんでした。

4

1 に答える 1

5

で使用されるような非同期コールバックから値を返すことはできませんquery。queryToDatabase を書き直して、2 番目の引数としてコールバックを取りrows、クエリが成功したときにそれを呼び出すようにする必要があります。次に、メイン コードを次のようにする必要があります。

queryToDatabase(query, function(result) {
     console.log(getTime() + "DB-Result Abfrage: " + result);
   });

実際には、クエリ結果に依存するすべてのコードは、そのコールバックに入る必要があります。

実際には、コールバックがエラー ステータス結果の 2 つの引数を取るようにする必要があります。エラー ステータスはnull、クエリが成功した場合です。

于 2012-08-03T16:25:01.617 に答える