My Express App создает множество knex-соединений с базами данных динамически, поскольку существует много проектов и разных баз данных. Недавно я столкнулся со следующей ошибкой:
TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx)
Я хочу закрыть соединения, созданные для каждого запроса. Для этого я использую Express hook res.on('finish', callback())
. Его запускают каждый раз, когда запрос закончен. Затем я передаю функцию, чтобы удалить все созданные подключения на req
:
closePoolOnFinish: (req, res, next) => {
res.on('finish', () => {
if (req.globalPool) req.globalPool.destroy()
if (req.projectPool) req.projectPool.destroy()
})
next()
}
Однако первый запрос успешно завершается, и пулы, кажется, закрыты правильно, но при попытке подключения к базе данных не удается выполнить следующее и выдает следующее сообщение об ошибке:
Unable to acquire a connection
Примечание: это даже правильное решение? Или я должен увеличить максимальное количество доступных соединений?