sql >> Databáze >  >> RDS >> Mysql

Node JS asynchronní databázová volání

Vracíte result a uzavření připojení předtím, než dotaz vrátí svou hodnotu z db. Umístěte tento kód do zpětného volání.

Při opravě kódu by měl vypadat takto:

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;
    });
}

Ačkoli to vyřeší pouze část problému, protože nyní stále voláte response.end(callDatabase(id)); před čekáním na odpověď z dotazu.

Abyste to napravili, musíte vrátit nějaký druh zpětného volání.

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);
    });
}

Nyní to můžete nazvat takto:

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



  1. Vložit do... Sloučit... Vybrat (SQL Server)

  2. Omezení paměti v SQL Server 2016 SP1

  3. Simulace šifrování MySql password() pomocí .NET nebo MS SQL

  4. SQL INSERT bez určení sloupců. Co se stalo?