【问题标题】:NestJs not reading environmental variablesNestJs 不读取环境变量
【发布时间】:2021-08-01 14:13:18
【问题描述】:

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

app.module.ts

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

.env 文件在 src 文件夹中

ma​​il.module.ts

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

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

【问题讨论】:

    标签: node.js typescript environment-variables nestjs dotenv


    【解决方案1】:

    问题是 ConfigModule 的 env 变量仅在运行时可用,而在 nestjs 初始状态下不可用。

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

    ma​​il.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,
            },
          },
        };
      }
    }
    
    

    ma​​il.module.ts

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

    你也可以使用useFactory而不需要类,这里我想控制台记录.env供你检查,所以我使用了配置类。

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2020-03-12
      • 2021-03-08
      相关资源
      最近更新 更多