在 main.ts 中使用 .env 文件中的数据 - NestJS

Kri*_*ram 8 environment-variables node.js nestjs

NestJS 允许我们通过 ConfigModule 读取 .env 文件,我可以使用如下代码在我的模块中轻松完成此操作

@Module({
  imports: [ConfigModule.forRoot()],
  providers: [
    NVFullNameSearchService,
    NVPartialNameSearchService,
    NVPersistService,
  ],
  controllers: [NvController],
})
Run Code Online (Sandbox Code Playgroud)

但上面的代码更多的是在模块内处理,如何从 main.ts 中的 .env 文件中读取内容。假设我需要为 Redis 服务设置端口和主机?

const microserviceOptions = {
  name: 'plscorecard',
  transport: Transport.REDIS,
  options: {
    url: 'redis://localhost:6379',
  },
};
async function bootstrap() {
  const app = await NestFactory.createMicroservice(
    NVModule,
    microserviceOptions,
  );
  app.listen(() => {
    logger.log('NameVerification Redis microservice is listening ... ');
  });
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在这种情况下应用程序尚未创建。我应该直接使用dotenv吗?正如您在任何企业环境中所期望的那样,我为 DEV、QA、UAT 和 Production 提供了不同的 env 文件。实现它的最简单/正确的方法是什么?

Kri*_*ram 17

感谢大家的支持。这是我修复它的方法

**app.module.ts**
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `config/${process.env.NODE_ENV}.env`,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

现在模块已经有了正确的设置,唯一剩下的就是以一种更非常规但有记录的方式从 main.ts 调用它

**main.ts**
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { Transport } from '@nestjs/microservices';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';

async function bootstrap() {
  const logger = new Logger('main');
  const app = await NestFactory.create(AppModule);
  const configService = app.get(ConfigService);
  const REDIS_HOST = configService.get<string>('REDIS_HOST');
  const REDIS_PORT = configService.get<number>('REDIS_PORT');
  const microserviceOptions = {
    transport: Transport.REDIS,
    options: {
      url: `redis://${REDIS_HOST}:${REDIS_PORT}`,
    },
  };
  app.connectMicroservice(microserviceOptions);
  const PORT = configService.get<number>('PORT');
  const environment = configService.get<string>('NODE_ENV');
  const title = configService.get<string>('ENVIRONMENT_TITLE');
  await app.listen(PORT);
  logger.log(
    `${environment}, Microservice ready to receive Redis messages in PORT - ${PORT}\n Environment - ${title}`,
  );
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)