我正在为我的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解析?
根据这个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实例,所以这只是一个部分解决方案。