Mysql
 sql >> Base de données >  >> RDS >> Mysql

Node.js, Request, MySQL et Connection Pooling conduisent à un comportement de blocage/gel infini ?

Vous utilisez une boucle synchrone pour déployer une ressource asynchrone. Vous ne pouvez pas faire ça.

Votre boucle while remplit le pool de base de données, puis boucle à nouveau et bloque sur getConnection qui bloque alors toute la boucle d'événements Node.js.

Vous pouvez utiliser le async package pour effectuer des boucles while asynchrones.

Le async#forever call ferait ce que vous essayez d'accomplir.

De plus, votre code fuit les connexions à la base de données. Vous devez mettre le connection.end() premier dans le rappel à moins que vous n'utilisiez à nouveau la même connexion. Sinon, une erreur entraînera une fuite de connexion à la base de données.

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