Нужно открывать пул соединений через mysql.createPool используя библиотеку
https://www.npmjs.org/package/mysql чтобы не случилось, что какое-то занято на долго запросом, а другое в ассинхронном режиме пришло и хочет быть обработано, пока предыдущее еще не вернулось. На событие разрыва соединения нужно навешивать его возобновление. Для случая с одним соединением так (для пула это нужно навесить на каждый конекшен:
var mysql = require('mysql');
connectMySql();
function connectMySql() {
var connection = mysql.createConnection(connectionString);
connection.connect(function(err) {
if (err) {
setTimeout(function() {
connectMySql()
}, 3000);
}
});
connection.on('error', function(err) {
if (err.code === 'PROTOCOL_CONNECTION_LOST') connectMySql();
});
}
Если у вас небольшое приложение, то не стесняйтесь сделать конекшен или пул глобальным, чтобы он был сразу определен на обработчиках, а еще лучше сделайте для своего приложения неймспейс в глобальном контексте, например myApp = {} и в него запишите myApp.db = connection чтобы потом писать myApp.db.query(...); Посмотрите, какие красивые и лаконичные обработчики можно сделать, если не вестись на эти REST-суеверия и предубеждения против состояния на сервере и открытых долго конекшенов к БД и глобальных неймспейсов:
// Обработчик для API по урлу http://127.0.0.1/example/app/examples/mysql/getCities.json
module.exports = function(client, callback) {
aliasNameMy.query('select * from City', function(err, rows, fields) {
callback({ rows:rows, fields:fields });
});
}
На гитхабе этот обработчик в контексте демо-приложения:
https://github.com/tshemsedinov/impress/blob/maste...
Ну и еще порекомендую свои утилиты для драйвера MySQL -
https://www.npmjs.org/package/mysql-utilities
и две статьи на Хабре, одну по этим утилитам -
habrahabr.ru/post/198738 , а вторую по архитектуре в целом -
habrahabr.ru/post/204958