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.
我按照 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.