Node.js NestJs不读取环境变量
我按照嵌套创建配置,但它不起作用 应用程序模块.tsNode.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
@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类