MySQL пул, последовательно запускающий MaxListenersExceededWarning - PullRequest
0 голосов
/ 28 мая 2020

Я использую node, express и mysql. Я создаю пул соединений, как показано ниже:

const mysql = require('mysql');

//DB connection pool
const pool = mysql.createPool({
    connectionLimit: 100,
    host: 'host',
    user: 'admin',
    password: 'pass',
    database: 'db',
    port:3306,
    debug: false
});


module.exports = pool;

Затем я использую файлы маршрутов для подключений к базе данных. Типичное соединение структурировано следующим образом:

  pool.getConnection(function(err, connection){
    if(err) {
      connection.release();
      res.json({"code": 100, "status": "Error in database connection"});
      return;
    }
    console.log("connected as id: " + connection.threadId);

    let sql = "SELECT intAccountID, strUserName FROM accounts WHERE strAuthID = ?";
    //parse Auth0 ID string to get id after "|"
    let authID = req.substring(req.indexOf("|") + 1);

    connection.query(sql, authID, function(err, rows, fields) {
      connection.release();
      if(!err) {
        res.json(rows[0])
      }
    });    

    connection.on('error', function(err){
      connection.release();
      res.json({"code": 100, "status": "Error in database connection"});
    })
  })

Я постоянно получаю эту ошибку:

(node:20912) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [PoolConnection]. Use emitter.setMaxListeners() to increase limit

Я считаю, что это связано с тем, что mysql соединения пула используются повторно и настроен прослушиватель ошибок. не сбрасывается, когда я освобождаю соединение. Как очистить прослушиватель при разрыве соединения? Есть ли лучший способ структурировать соединения моего пула, чтобы избежать этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...