Не закрывается пул соединений (mysql2)

Есть серверное приложение на стеке Node.js + Express + MySql (mysql2/promise). Пытаюсь настроить закрытие соединения с базой при завершении работы приложения. Вот минимальный вопроизводимый пример проблемного кода:

import mysql from 'mysql2/promise'
import express from 'express';
import https from 'https';

const connectionPool = mysql.createPool({
    password: 'some_password',
    user: 'some_user',
    host: 'localhost',
    port: 3306
});
const app = express();
const httpsServer = https.createServer(app);

async function initDataBase() {
    await connectionPool.query('CREATE DATABASE IF NOT EXISTS test;');
}

initDataBase().then(() => {
    app.use(express.json());
    app.get('/hello', (req, res) => res.send('Hi!'));
    app.listen(8080, () => console.log('Server was started successfully.'));
});

process.on('SIGINT', () => {
    console.log('SIGINT signal was received.');
    httpsServer.close(() => {
        console.log('http server has closed.');
        connectionPool.end(() => {
            console.log('connection pool has closed.');
            process.exit(0);
        });
    });
});

При закрытии приложения через ctrl + c в консоль не выводится запись 'connection pool has closed'. После вывода 'http server has closed' приложение зависает. При повторном нажатии ctrl + c выдает ошибку: Can't add new command when connection is in closed state. Пожалуйста, подскажите с чем связана ошибка и как правильно закрывать соединение с MySql.


Ответы (1 шт):

Автор решения: nörbörnën

Попробуйте так

process.on('SIGINT', () => {
  console.log('SIGINT signal was received.');
  httpsServer.close(async (err) => {
    if (err) console.error(err);
    console.log('http server has closed.');
    await connectionPool.end().catch(console.error);
    console.log('connection pool has closed.');
    process.exit(0);
  });
});
→ Ссылка