如何在NestJS中拆除MikroOrm

如何在NestJS中拆除MikroOrm,nestjs,mikro-orm,Nestjs,Mikro Orm,我最近将AppModule转换为动态模块,以便能够根据上下文(E2E测试等)为MikroOrm提供不同的配置,目前看起来如下: @模块({ 进口:[ MikroOrmModule.forFeature({ 实体:[待办事项], }), ], 提供者:[TodoService], 控制器:[AppController,TodosController], }) 导出类AppModule{ 静态寄存器(选项?:{ mikroOrmOptions?:MikroOrmModuleOptions; }):动

我最近将AppModule转换为动态模块,以便能够根据上下文(E2E测试等)为MikroOrm提供不同的配置,目前看起来如下:

@模块({
进口:[
MikroOrmModule.forFeature({
实体:[待办事项],
}),
],
提供者:[TodoService],
控制器:[AppController,TodosController],
})
导出类AppModule{
静态寄存器(选项?:{
mikroOrmOptions?:MikroOrmModuleOptions;
}):动态模块{
返回{
模块:AppModule,
进口:[
MikroOrmModule.forRoot({
实体:[待办事项],
键入:“postgresql”,
主机:process.env.DB_主机,
端口:process.env.DB_port?parseInt(process.env.DB_port):5432,
用户:process.env.DB_用户,
密码:process.env.DB_PASS,
dbName:process.env.DB_DB,
…选项?MikroorOptions,
}),
],
};
}
}
现在,我试图通过断开与数据库的连接来确保应用程序正常关闭,但不确定在这种情况下将生命周期挂钩放在何处。似乎不可能有一个带有生命周期钩子的动态模块,所以我正在考虑开发一个单独的提供程序来注入orm并在其上编写钩子

正确的方法是什么?谢谢

编辑:

我提出了以下解决方案。希望有人指出这是否是最好的方式:

从'mikro orm'导入{MikroORM};
...
@模块({
进口:[
MikroOrmModule.forFeature({
实体:[待办事项],
}),
],
提供者:[TodoService],
控制器:[AppController,TodosController],
})
导出类AppModule实现OnModuleDestroy{
静态寄存器(选项?:{
mikroOrmOptions?:MikroOrmModuleOptions;
}):动态模块{
返回{
模块:AppModule,
进口:[
MikroOrmModule.forRoot({
实体:[待办事项],
键入:“postgresql”,
主机:process.env.DB_主机,
端口:process.env.DB_port?parseInt(process.env.DB_port):5432,
用户:process.env.DB_用户,
密码:process.env.DB_PASS,
dbName:process.env.DB_DB,
…选项?MikroorOptions,
}),
],
};
}
构造函数(私有orm:MikroORM){}
异步onModuleDestroy():承诺{
等待这个。orm.close();
}
}

正如问题中所讨论的,我将采用nestjs/typeorm的使用方式,因此在应用程序关机时使用
钩子

还将此问题链接到此处,以供将来可能的读者阅读: