Evitar el error de conexi贸n de nodo-mysql cerrada

He estado usando nodemon y siempre para mantener en funcionamiento mi aplicaci贸n Node.js respaldada por MySQL. Tuve un peque帽o problema en el que la aplicaci贸n se bloqueaba despu茅s de 24-36 horas con MySQL cerrando la conexi贸n. Simplemente asum铆 que se deb铆a a una mala codificaci贸n de mi parte, pero realmente no sab铆a d贸nde estaba mi error hasta ahora …

exports.getData = function getData(what, callback) {
pool
.getConnection(function(err, connection) {
connection
.on('error', function(err) {
console
.log(err); // 'ER_BAD_DB_ERROR'
});
var sql = "SELECT * FROM table WHERE column = '" + what + "'";
connection
.query(sql, function(err, rows) {
connection
.on('error', function(err) {
console
.log(err); // 'ER_BAD_DB_ERROR'
});
callback
(rows);
});
connection
.release();
});
}

Este c贸digo funciona, no todo el tiempo, pero el 99% de las veces funciona muy bien.

Resulta que el problema es d贸nde estaba liberando la conexi贸n …

exports.getData = function getData(what, callback) {
pool
.getConnection(function(err, connection) {
connection
.on('error', function(err) {
console
.log(err); // 'ER_BAD_DB_ERROR'
});
var sql = "SELECT * FROM table WHERE column = '" + what + "'";
connection
.query(sql, function(err, rows) {
connection
.on('error', function(err) {
console
.log(err); // 'ER_BAD_DB_ERROR'
});
connection
.release(); //Here is where it should be.
callback
(rows);
});
//Not Here
});
}

Estaba volviendo a llamar a otras funciones, que a veces en s铆 mismas eran devoluciones de llamada o realizaban otras tareas de larga duraci贸n y nunca liberaban la conexi贸n.

Ya que ten铆a un grupo de conexiones, deber铆a haber estado liberando la conexi贸n cuando termin茅 con eso … imagina eso.

** TL; DR **
Siempre levante sus juguetes cuando haya terminado con ellos.