Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Node.js, Request, MySQL e Connection Pooling levam a um comportamento de bloqueio/congelamento infinito?


Você está usando um loop síncrono para implantar um recurso assíncrono. Você não pode fazer isso.

Seu loop while preenche o pool de banco de dados e, em seguida, faz um loop novamente e bloqueia em getConnection que bloqueia todo o loop de eventos do Node.js.

Você pode usar o async pacote para executar loops while assíncronos.

O async#forever call faria o que você está tentando alcançar.

Além disso, seu código está vazando conexões de banco de dados. Você deve colocar o connection.end() primeiro no retorno de chamada, a menos que você vá usar a mesma conexão novamente. Caso contrário, um erro vazará uma conexão de banco de dados.
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);
    });
});