Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Asynchroniczne wywołania bazy danych węzła JS

Zwracasz result i zamknięcie połączenia, zanim zapytanie zwróci jego wartość z bazy danych. Umieść ten kod w wywołaniu zwrotnym.

Naprawiając kod, powinien wyglądać tak:

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

Chociaż rozwiąże to tylko część problemu, ponieważ teraz nadal wywołujesz response.end(callDatabase(id)); przed oczekiwaniem na odpowiedź z zapytania.

Aby to naprawić, musisz zwrócić jakiś rodzaj połączenia zwrotnego.

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

Teraz możesz to nazwać tak:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wymień wszystkie tabele zawierające podaną nazwę kolumny

  2. Wstawiaj dane do wielu tabel za pomocą jednego formularza

  3. Czy w PHP/MySQL powinienem otwierać wiele połączeń z bazą danych czy udostępniać 1?

  4. Pobieranie programu Excel zatrzymało się 188kb

  5. Wydrukować dane hierarchiczne w postaci nadrzędnej potomnej z nieuporządkowanej listy php?