npm - mysql вылетает за ночь - PullRequest
0 голосов
/ 14 июля 2020

Класс:

const mysql = require('mysql');
module.exports = function () {

  this.connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'USER',
    password : 'PASSWORD',
    database : 'DATABASE',
    multipleStatements: true
  });
  
  this.query = (sql, args) => {
    return new Promise( ( resolve, reject ) => {
      this.connection.query( sql, args, ( err, rows ) => {
        if ( err )
          return reject( err );
        resolve( rows );
      });
    });
  };

  this.close = () => {
    return async () => {
      try {
        this.connection.end(err => {
          if (err) throw err;
          return;
        });
      } catch(e) {
        return e;
      }
    }
  };
};

В индексе я называю это так:

const Database = require('./server/modules/mysql'),
      connection = new Database();

Проблема: Ночь mysql сбой:

[nodemon] starting `node index.js`
listening on port 420
events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: Connection lost: The server closed the connection.
    at Protocol.end (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\protocol\Protocol.js:112:13)
    at Socket.<anonymous> (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\Connection.js:94:28)
    at Socket.<anonymous> (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\Connection.js:526:10)
    at Socket.emit (events.js:327:22)
    at endReadableNT (_stream_readable.js:1221:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\Connection.js:423:8)
    at Protocol.emit (events.js:315:20)
    at Protocol._delegateError (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\protocol\Protocol.js:398:10)
    at Protocol.end (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\protocol\Protocol.js:116:8)
    at Socket.<anonymous> (C:\Users\fedesc\Sites\borsalino\node_modules\mysql\lib\Connection.js:94:28)
    [... lines matching original stack trace ...]
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  fatal: true,
  code: 'PROTOCOL_CONNECTION_LOST'
}
[nodemon] app crashed - waiting for file changes before starting...

Я использую Nodemon, и простой перезапуск приложения решает выпуск до следующего утра (или следующего длительного периода отсутствия кодирования.)

Я на самом деле не использую close() где-либо и после чего-либо, поскольку в документах говорится, что это не нужно, просто query(). но очевидно, что где-то у меня появляется timeout, как будто я должен иметь дело с открытием и закрытием соединения.

  1. Нужно ли мне закрывать соединения после выполнения запросов в моем приложении?
  2. Есть ли способ установить лимит тайм-аута или как с ним разобраться?
  3. Я просто неправильно его установил или использую неправильный / устаревший инструмент?

Спасибо.

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