Ошибка: невозможно поставить запрос в очередь после фатальной ошибки.Expressjs.Mysql - PullRequest
0 голосов
/ 12 октября 2018

У меня есть Express JS подключиться к нескольким БД.Который работает каждый раз, когда я запускаю свое приложение.Но как только мое соединение с базой данных устареет ... соединение возвращает код ошибки PROTOCOL_CONNECTION_LOST.Что нормально для mysql, когда соединение бездействует.Мой сервер mysql развернут в AWS RDS, который также отлично работает.

Проблема в том, что каждый раз, когда мое экспресс-приложение сталкивается с ошибкой PROTOCOL_CONNECTION_LOST, оно должно повторно подключаться к базе данных, что на самом деле также работает.BUUT, когда я пытаюсь сделать запросы к моей базе данных MYSQL.Возвращает ошибку Error: Cannot enqueue Query after fatal error..Я имел дело с этим некоторое время, и мой обходной путь - перезапускать экспресс-приложение каждый раз.надеюсь, кто-то еще сталкивался с этим и мог бы дать совет.

Вот мой пример кода для подключения к БД:

var mysql = require('mysql');
var mysqlConn
// mysqlConn.connect();

function handleDisconnect() {
    mysqlConn = mysql.createConnection({
        host: 'aws_instance***',
        user: '******',
        password: '*****',
        database: 'my_db',
        multipleStatements: true
    });

    mysqlConn.connect(function (err) {
        if (err) {
            console.log('ERROR CONNECT admin:', err.code + '--' + err.address);
            setTimeout(handleDisconnect, 2000);
        } else {
            console.log('Connected to DB')
        }
    });

    mysqlConn.on('error', function (err) {
        console.log('ERROR admin', err.code + '--' + err.address);
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {   // Connection to the MySQL server is usually
            console.log("Connection to db lost!")
            handleDisconnect();                         // lost due to either server restart, or a
        } else {    
            console.log(err)                                  // connnection idle timeout (the wait_timeout
            throw err;                                  // server variable configures this)
        }
    });

}

handleDisconnect();
module.exports = {
    mysqlConn: mysqlConn,
};

Тогда вот мои выходные журналы, как показано в журналах моего сервера.

ERROR db PROTOCOL_CONNECTION_LOST--undefined
Connection to db lost!
Connected to db
OPTIONS /verify-token/ 200 0.285 ms - 4
Error: Cannot enqueue Query after fatal error.
POST /verify-token/ 500 1.332 ms - 95
OPTIONS /auth/login 200 0.793 ms - 4
Error: Cannot enqueue Query after fatal error.
POST /login 500 1.564 ms - 58
OPTIONS /login 200 0.687 ms - 4
Error: Cannot enqueue Query after fatal error.
POST /login 500 1.467 ms - 58

1 Ответ

0 голосов
/ 15 октября 2018

Хотя есть обходные пути , они, по-видимому, не работают для всех .В документации предлагается использовать пул соединений вместо ручного управления отдельными соединениями.

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