NestJs不读取环境变量 [英] NestJs not reading environmental variables

查看:59
本文介绍了NestJs不读取环境变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我按照Nestdocumentation创建配置,但它不起作用

app.module e.ts

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

.env文件位于src文件夹

mail.module e.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 e.ts

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

您也可以在不需要类的情况下使用useFactory,这里我想对.env进行控制台。记录.env供您检查,所以我使用了config类。

这篇关于NestJs不读取环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆