NestJs:无法读取模块文件中的env变量但是能否在服务文件中读取?

问题描述 投票:0回答:1

我在我的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文件中可靠地访问环境变量?

javascript node.js typescript nestjs dotenv
1个回答
1
投票

当您的.env被实例化时,您的JwtModule文件尚未读入。所以要么在早先阅读它,例如在创建嵌套应用程序之前的main.ts或更好:创建一个ConfigService并明确依赖于您的配置:

JwtModule.registerAsync({
    imports: [ConfigModule],
    useFactory: async (configService: ConfigService) => ({
      secretOrPrivateKey: configService.jwtSecret,
    }),
    inject: [ConfigService],
}),

有关如何创建this answer的信息,请参阅ConfigService

© www.soinside.com 2019 - 2024. All rights reserved.