Как правильно закрыть пулы соединений по экспресс-запросу - PullRequest
0 голосов
/ 25 марта 2019

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

Примечание: это даже правильное решение? Или я должен увеличить максимальное количество доступных соединений?

...