gpt4 book ai didi

nestjs - 如何在 NestJS 中拆除 MikroOrm

转载 作者:行者123 更新时间:2023-12-05 03:52:47 26 4
gpt4 key购买 nike

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

@Module({
imports: [
MikroOrmModule.forFeature({
entities: [Todo],
}),
],
providers: [TodoService],
controllers: [AppController, TodosController],
})
export class AppModule {
static register(options?: {
mikroOrmOptions?: MikroOrmModuleOptions;
}): DynamicModule {
return {
module: AppModule,
imports: [
MikroOrmModule.forRoot({
entities: [Todo],
type: 'postgresql',
host: process.env.DB_HOST,
port: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 5432,
user: process.env.DB_USER,
password: process.env.DB_PASS,
dbName: process.env.DB_DB,

...options?.mikroOrmOptions,
}),
],
};
}
}

现在我试图通过与数据库断开连接来确保正常关闭应用程序,但不确定在这种情况下将生命周期 Hook 放在何处。似乎不可能有一个带有生命周期 Hook 的动态模块,所以我正在考虑开发一个单独的提供程序来注入(inject) orm 并在其上编写 Hook 。

什么是正确的方法?谢谢。

编辑:

我想出了以下解决方案。如果有人指出这是否是最好的方法,我们将不胜感激:

import { MikroORM } from 'mikro-orm';
...

@Module({
imports: [
MikroOrmModule.forFeature({
entities: [Todo],
}),
],
providers: [TodoService],
controllers: [AppController, TodosController],
})
export class AppModule implements OnModuleDestroy {
static register(options?: {
mikroOrmOptions?: MikroOrmModuleOptions;
}): DynamicModule {
return {
module: AppModule,
imports: [
MikroOrmModule.forRoot({
entities: [Todo],

type: 'postgresql',
host: process.env.DB_HOST,
port: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 5432,
user: process.env.DB_USER,
password: process.env.DB_PASS,
dbName: process.env.DB_DB,

...options?.mikroOrmOptions,
}),
],
};
}

constructor(private orm: MikroORM) {}

async onModuleDestroy(): Promise<void> {
await this.orm.close();
}
}


最佳答案

正如问题中所讨论的那样,我会采用 nestjs/typeorm 使用的方式,因此使用 onApplicationShutdown Hook 。

同时为 future 可能的读者链接问题:

https://github.com/dario1985/nestjs-mikro-orm/issues/10

关于nestjs - 如何在 NestJS 中拆除 MikroOrm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62033627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com