如何在使用webpack hot module reload启动新实例之前等待app关闭?

问题描述 投票:0回答:1

我正在为我的nest.js应用程序使用webpack hot module reload(hmr)。重新加载但不会等待旧实例在启动新实例之前完全关闭(数据库连接,电报机器人......)。这使得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处理程序返回的promise解析?

node.js typescript webpack nestjs webpack-hmr
1个回答
0
投票

根据这个issue,你可以在typeorm选项中将keepConnectionAlive设置为true,以便重用连接。

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

这确实解决了类型错误,但电报机器人的问题仍然存在:

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

我不认为我可以重用bot实例,所以这只是一个部分解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.