Mysql
 sql >> Database >  >> RDS >> Mysql

Node.js, Request, MySQL e Connection Pooling portano a un comportamento di blocco/congelamento infinito?

Stai usando un ciclo sincrono per distribuire una risorsa asincrona. Non puoi farlo.

Il tuo ciclo while riempie il pool di database, quindi esegue nuovamente il ciclo e si blocca su getConnection che quindi blocca l'intero ciclo di eventi Node.js.

Puoi usare il async pacchetto per eseguire cicli asincroni while.

Il async#forever call farebbe quello che stai cercando di ottenere.

Inoltre, il tuo codice perde connessioni al database. Dovresti inserire connection.end() prima nella richiamata a meno che non si intenda utilizzare nuovamente la stessa connessione. In caso contrario, un errore perderà la connessione al database.

pool.getConnection(function (err, connection) {
    if (err) throw err;
    connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
      connection.end(); // return to pool before evaluating error.
      if (err) throw err;
      console.log('The solution is: ', rows[0].solution);
    });
});