sql >> データベース >  >> RDS >> Mysql

ノードJS非同期データベース呼び出し

    resultを返しています クエリがデータベースから値を返す前に接続を閉じます。そのコードをコールバック内に配置します。

    コードを修正すると、次のようになります。

    function callDatabase(id) {
        var result;
        var connection = mysql.createConnection(
            {
                host        :   '192.168.1.14',
                user        :   'root',
                password    :   '',
                database    :   'test'
            }
        );
    
        connection.connect();
        var queryString = 'SELECT name FROM test WHERE id = 1';
    
        connection.query(queryString, function(err, rows, fields) {
            if (err) throw err;
    
            for (var i in rows) {
                result = rows[i].name;
            }
    
            connection.end();
            return result;
        });
    }
    

    ただし、これは問題の一部を解決するだけですが、今でもresponse.end(callDatabase(id));を呼び出しているためです。 クエリからの応答を待つ前に。

    これを修正するには、ある種のコールバックを返す必要があります。

    function callDatabase(id, callback) {
        // the method code here...
        connection.query(queryString, function(err, rows, fields) {
            // code...
    
            // instead of returning the result, invoke the callback!
            callback(rows);
        });
    }
    

    これで、次のように呼び出すことができます:

    request.on('data', function (chunk) {
        var json = JSON.parse(chunk);
        var id = parseInt(json["id"]);
        callDatabase(id, function(res) {
            response.end(res);
        });
    });
    



    1. SQLclフォーマットオプション(Oracle)

    2. xmlの要素属性の値を取得するためのMySqlクエリ

    3. MySQLはグループの最新レコードを取得します

    4. OracleシステムがUnicodeまたはマルチバイト文字をサポートするように設定されているかどうかを確認するにはどうすればよいですか?