我按照 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,
},
},
}),
],
但是当我运行应用程序时,它的未定义我的键值对也在那里。
答案 0 :(得分:1)
问题是 ConfigModule 的 env 变量仅在运行时可用,而在 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
而无需类,在这里我想控制台.log .env 供你检查,所以我使用了配置类。