我在我的NestJs项目的根目录下有一个.env
文件,里面有一些env变量。
奇怪的是,我能够读取服务文件中的变量,但不能读取模块文件中的变量。
所以在像users.service.ts
这样的服务文件中,这有效:
saveAvatar() {
const path = process.env.AVATAR_PATH // returns value from .env
}
但是,当访问模块文件(如auth.module.ts
)中的路径时,将返回一个空值:
@Module({
imports: [
JwtModule.register({
secretOrPrivateKey: process.env.SECRET // process.env.SECRET returns an empty string
})
]
})
为什么会这样?如何在NestJs的.env
文件中可靠地访问环境变量?
当您的.env
被实例化时,您的JwtModule
文件尚未读入。所以要么在早先阅读它,例如在创建嵌套应用程序之前的main.ts
或更好:创建一个ConfigService
并明确依赖于您的配置:
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
secretOrPrivateKey: configService.jwtSecret,
}),
inject: [ConfigService],
}),
有关如何创建this answer的信息,请参阅ConfigService
。