Node.js NestJs不读取环境变量

Node.js NestJs不读取环境变量,node.js,typescript,environment-variables,nestjs,dotenv,Node.js,Typescript,Environment Variables,Nestjs,Dotenv,我按照嵌套创建配置,但它不起作用 应用程序模块.ts @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), TypeOrmModule.forRoot(config), AuthModule, UsersModule, MailModule, CloudinaryModule, ], controllers: [AppController], providers

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

应用程序模块.ts

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRoot(config),
    AuthModule,
    UsersModule,
    MailModule,
    CloudinaryModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
@Module({
  imports: [
    MailerModule.forRoot({
      transport: {
        service: 'Gmail',
        auth: {
          user: process.env.MAIL_USER,
          pass: process.env.MAIL_PASS,
        },
      },
    }),
  ],
.env
文件位于src文件夹中

mail.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRoot(config),
    AuthModule,
    UsersModule,
    MailModule,
    CloudinaryModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
@Module({
  imports: [
    MailerModule.forRoot({
      transport: {
        service: 'Gmail',
        auth: {
          user: process.env.MAIL_USER,
          pass: process.env.MAIL_PASS,
        },
      },
    }),
  ],

但当我运行应用程序时,其未定义的my key-value对也在那里。

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

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

mail.config.ts

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRoot(config),
    AuthModule,
    UsersModule,
    MailModule,
    CloudinaryModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
@Module({
  imports: [
    MailerModule.forRoot({
      transport: {
        service: 'Gmail',
        auth: {
          user: process.env.MAIL_USER,
          pass: process.env.MAIL_PASS,
        },
      },
    }),
  ],
导出类MailerConfig实现MailerOptionsFactory{
createMailerOptions():MailerOptions |承诺{
console.log(process.env.MAIL_USER);//应该有值
返回{
运输:{
服务:“Gmail”,
认证:{
用户:process.env.MAIL\u用户,
pass:process.env.MAIL\u pass,
},
},
};
}
}
mail.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRoot(config),
    AuthModule,
    UsersModule,
    MailModule,
    CloudinaryModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
@Module({
  imports: [
    MailerModule.forRoot({
      transport: {
        service: 'Gmail',
        auth: {
          user: process.env.MAIL_USER,
          pass: process.env.MAIL_PASS,
        },
      },
    }),
  ],
console.log(process.env.MAIL_USER);//未定义
@模块({
进口:[
MailerModule.forRootAsync({
useClass:MailerConfig,
}),
],
})
导出类MailModule{}

您也可以使用
useFactory
,而无需使用类,这里我想要console.log.env供您检查,因此我使用了config类