sql >> Base de Datos >  >> RDS >> Mysql

Llamadas de base de datos asíncronas de Node JS

Estás devolviendo result y cerrar la conexión antes de que la consulta haya devuelto su valor de la base de datos. Coloque ese código dentro de la devolución de llamada.

Arreglando su código, debería verse así:

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

Aunque esto solo resolverá una parte del problema, ya que ahora todavía estás llamando a response.end(callDatabase(id)); antes de esperar una respuesta de la consulta.

Para solucionar esto, debe devolver algún tipo de devolución de llamada.

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

Ahora puedes llamarlo así:

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