Как дождаться закрытия приложения, прежде чем запускать новый экземпляр с перезагрузкой модуля hotpack? - PullRequest
0 голосов
/ 23 февраля 2019

Я использую горячую перезагрузку модуля (hmr) для своего приложения nest.js.Перезагрузка работает, но не ждет полного закрытия старого экземпляра (соединение с базой данных, бот Telegram, ...) перед запуском нового экземпляра.Это заставляет typeorm выдавать следующую ошибку:

AlreadyHasActiveConnectionError: Cannot create a new connection named "default", because connection with such name already exist and it now has an active connection session.

В моем main.ts у меня есть обработчик dispose, который закрывает старый экземпляр:

if (module && module.hot) {
  module.hot.accept();
  module.hot.dispose(async () => {
    console.log('disposing module');
    await app.close();
    console.log('has closed app');
  });
}

Когда я запускаю hmr и внослю измененияв моем приложении я вижу, что он вызывает обработчик dispose и немедленно запускает новое приложение.Как я могу заставить webpack ждать обещание разрешить, возвращаемое обработчиком dispose, перед запуском нового экземпляра?

1 Ответ

0 голосов
/ 23 февраля 2019

В соответствии с этой проблемой , вы можете установить keepConnectionAlive в true в параметрах typeorm для повторного использования соединения.

TypeOrmModule.forRoot({
  // ...
  keepConnectionAlive: true,
})

Это действительно решает ошибку typeorm, но проблема с ботом telegram сохраняется:

Error: 409: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

Я не думаю, что могу повторно использовать экземпляр бота, так что это толькочастичное решение.

...