有没有办法在 App.Module.ts 中使用 configService?

har*_*ang 8 javascript node.js typescript typeorm nestjs

我正在使用 NestJs 构建 RESTful 服务,我已经按照示例为不同的环境构建配置。它适用于大多数代码。但是我想知道我是否可以在我的app.module.ts?

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mongodb',
      host: `${config.get('mongo_url') || 'localhost'}`,
      port: 27017,
      username: 'a',
      password: 'b',
      database: 'my_db',
      entities: [__dirname + '/MyApp/*.Entity{.ts,.js}'],
      synchronize: true}),
    MyModule,
    ConfigModule,
  ],
  controllers: [],
  providers: [MyService],
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

如您所见,我确实想将 MongoDb Url 信息移到代码之外,并且我正在考虑利用.env文件。但是经过一些尝试,它似乎不起作用。

当然我可以${process.env.MONGODB_URL || 'localhost'}改用,并设置环境变量。我仍然很好奇我是否能完成这项configService工作。

Kim*_*ern 18

您必须使用动态导入(请参阅异步配置)。有了它,您可以注入依赖项并将它们用于初始化:

TypeOrmModule.forRootAsync({
  imports: [ConfigModule],
  useFactory: (configService: ConfigService) => ({
    type: 'mongodb',
    host: configService.databaseHost,
    port: configService.databasePort,
    username: configService.databaseUsername,
    password: configService.databasePassword,
    database: configService.databaseName,
    entities: [__dirname + '/**/*.entity{.ts,.js}'],
    synchronize: true,
  }),
  inject: [ConfigService],
}),
Run Code Online (Sandbox Code Playgroud)

  • @soroush configService 是一个依赖项,将用于解析环境变量并传递给 typeorm,因此 Nest 将 configService 传递到 usefactory 中,以便可以使用它。 (2认同)