Не закрывается пул соединений (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);
});
});