由于存在许多项目和不同的数据库,因此My Express App会动态创建许多与数据库的knex连接。我最近遇到以下错误:
TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx)
我想关闭为每个请求创建的连接。为此,我使用Express钩子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
注意:这是否是正确的解决方案?还是应该增加最大可用连接数?