如何根据快速完成请求正确关闭连接池

时间:2019-03-25 16:20:49

标签: javascript node.js express knex.js

由于存在许多项目和不同的数据库,因此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

注意:这是否是正确的解决方案?还是应该增加最大可用连接数?

0 个答案:

没有答案