NestJs 不读取环境变量

NestJs not reading environmental variables

我按照 Nest documentation 创建了配置,但它不起作用

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRoot(config),
    AuthModule,
    UsersModule,
    MailModule,
    CloudinaryModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

.env 文件在 src 文件夹中

mail.module.ts

@Module({
  imports: [
    MailerModule.forRoot({
      transport: {
        service: 'Gmail',
        auth: {
          user: process.env.MAIL_USER,
          pass: process.env.MAIL_PASS,
        },
      },
    }),
  ],

但是当我 运行 应用程序未定义时,我的键值对也在那里。

问题是 ConfigModule 的环境变量仅在 运行 时可用,但在 nestjs 初始状态时不可用。

为了允许在 nestjs 初始化后获取 .env,您可以在 MailerModule 中使用异步配置。

mail.config.ts

export class MailerConfig implements MailerOptionsFactory {
  createMailerOptions(): MailerOptions | Promise<MailerOptions> {
    console.log(process.env.MAIL_USER); // should have value
    return {
      transport: {
        service: 'Gmail',
        auth: {
          user: process.env.MAIL_USER,
          pass: process.env.MAIL_PASS,
        },
      },
    };
  }
}

mail.module.ts

console.log(process.env.MAIL_USER); // undefined
@Module({
  imports: [
    MailerModule.forRootAsync({
      useClass: MailerConfig,
    }),
  ],
})
export class MailModule {}

您也可以使用 useFactory 而无需 class,这里我想 console.log .env 供您检查,所以我使用了配置 class.