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

Node.js, Request, MySQL y Connection Pooling conducen a un comportamiento de bloqueo/congelación infinito.

Está utilizando un bucle síncrono para implementar un recurso asíncrono. No puedes hacer eso.

Su ciclo while llena el grupo de la base de datos y luego realiza un ciclo una vez más y se bloquea en getConnection que luego bloquea todo el bucle de eventos de Node.js.

Puede usar el async paquete para realizar bucles while asincrónicos.

El async#forever llamada haría lo que está tratando de lograr.

Además, su código tiene fugas en las conexiones de la base de datos. Debes poner el connection.end() primero en la devolución de llamada a menos que vaya a usar la misma conexión nuevamente. De lo contrario, un error perderá una conexión a la base de datos.

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