Есть ли способ использовать configService в App.Module.ts? - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю службу RESTful с помощью NestJ, я последовал примеру для создания конфигураций для различных сред.Это хорошо работает для большинства кода.Однако мне интересно, смогу ли я использовать его в моих 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 { }

Как вы можете видеть, я действительно хочу переместить информацию об URL MongoDb за пределы кода и думаю использовать файлы .env,Но после некоторых попыток он, похоже, не работает.

Конечно, я могу вместо этого использовать ${process.env.MONGODB_URL || 'localhost'} и установить переменные окружения.Мне все еще интересно, могу ли я заставить configService работать.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы должны использовать динамический импорт (см. Асинхронная конфигурация ).С его помощью вы можете внедрить зависимости и использовать их для инициализации:

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],
}),
...