Node JS Mysql PROTOCOL ENQUEUE ПОСЛЕ ОБЩЕЙ ОШИБКИ
Что означает ошибка?
{ [Error: Cannot enqueue Query after fatal error.] code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR', fatal: false }
Этот код работает в моем тестовом файле:
function handleDisconnect() {
objConn = mysql.createConnection(db_config); // Recreate the connection, since
// the old one cannot be reused.
objConn.connect(function(err) { // The server is either down
if(err) { // or restarting (takes a while sometimes).
console.log('error when connecting to db:', err.code);
setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect,
}else{
console.log('Connected to db!');
} // to avoid a hot loop, and to allow our node script to
}); // process asynchronous requests in the meantime.
// If you're also serving http, display a 503 error.
objConn.on('error', function(err) {
if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually
handleDisconnect(); // lost due to either server restart, or a
}else{
throw err;
}
});
}
handleDisconnect();
megaLoop();
function megaLoop(){
objConn.query('SELECT u.'email' FROM 'users' as u', function(err, rows) {
console.log(err);
console.log(rows);
});
setTimeout(megaLoop, 100);
}
Но когда я использую функцию в своем приложении Express, я получаю сообщение об ошибке:
{ [Error: Cannot enqueue Query after fatal error.] code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR', fatal: false }
Почему это работает в моем тесте, а не в моем приложении?
Ответы
Ответ 1
Я считаю, что проблема - это экспресс-sql-сессия. Сейчас у меня такая же проблема. Я думаю, что кто-то на что-то на этом посту: NodeJS, работающий на MAC, и произошла ошибка при развертывании на centOS
Проверьте это тоже: https://github.com/felixge/node-mysql/issues/1166
Ответ 2
У меня была похожая проблема, связанная с MySQL. Я решил эту проблему с помощью пула соединений. Идея состоит в том, чтобы получить соединение из пула соединений только при необходимости и освободить его после использования. Таким образом, соединение не будет в нестабильном состоянии. Вы можете получить подробности реализации здесь.
Ответ 3
Просто перезапустите проект узла.