Я использую 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 соединения пула используются повторно и настроен прослушиватель ошибок. не сбрасывается, когда я освобождаю соединение. Как очистить прослушиватель при разрыве соединения? Есть ли лучший способ структурировать соединения моего пула, чтобы избежать этого?