Кто-нибудь знает, почему эта ошибка происходит снова и снова через несколько минут? - PullRequest
0 голосов
/ 10 января 2019

Я использую пакет nodemon npm для автоматического перезапуска приложения узла при обнаружении изменений файла в каталоге. Сервер создается с использованием пакетов экспресс и http npm. Проблема в том, что когда сервер простаивает в течение нескольких минут, он выдает ошибку Ошибка: прочитайте ECONNRESET Фактическая ошибка выглядит следующим образом:

events.js:167
      throw er; // Unhandled 'error' event
      ^
Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
Emitted 'error' event at:
    at Connection._handleProtocolError (/home/abc/node_modules/mysql/lib/Connection.js:425:8)
    at Protocol.emit (events.js:182:13)
    at Protocol._delegateError (/home/abc/node_modules/mysql/lib/protocol/Protocol.js:390:10)
    at Protocol.handleNetworkError (/home/abc/node_modules/mysql/lib/protocol/Protocol.js:363:10)
    at Connection._handleNetworkError (/home/abc/node_modules/mysql/lib/Connection.js:420:18)
    at Socket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Я пытался отловить ошибку, но это не решило мою проблему.

process.on('uncaughtException', function(err) {  
   console.log("uncaughtException called: \n", err);
})

Сервер создан с использованием экспресс и http:

express = require('express');
app = express();
http = require('http');
var httpServer = http.createServer(app);
httpServer.listen(3000, function(req, res) {
    console.log('Server running at port 3000);
});

Я ожидаю, чтобы предотвратить возникновение ошибки ECONNRESET на сервере Какое решение?

1 Ответ

0 голосов
/ 23 апреля 2019

Мы видим, что это проблема mysql, основанная на выданной ошибке:

Emitted 'error' event at:
at Connection._handleProtocolError (/home/abc/node_modules/mysql/lib/Connection.js:425:8)

У меня возникла та же проблема, и способ ее устранения был после подключения к базе данных. Я добавлял setInterval каждые 20 минут, выполняя простой запрос, такой как db.query ('SELECT 1;') , Предположительно, mysql закрывает соединение после некоторого простоя, поэтому на основе этой записи 1005 *

"Разработчики модуля рекомендовали использовать сердцебиение для поддержания связи, например, вызывая SELECT 1; с интервалом."

Это быстрое решение, и оно сработало для меня, но если вы хотите найти другой способ, я рекомендую прочитать пост выше, так как есть другие решения для него.

...