【问题标题】:Dotenv variable is undefinedDotenv 变量未定义
【发布时间】:2020-12-21 07:19:43
【问题描述】:

我有一个模块(auth 模块),我在其中注册了 JwtModule:

JwtModule.register({
      secret: process.env.SECRET_KEY,
      signOptions: { expiresIn: '60m' },
    }),

注册函数如下:static register(options: JwtModuleOptions): DynamicModule;

JwtModule 在 node_modules (jwt.module.js) 中定义

let JwtModule = JwtModule_1 = class JwtModule {
    static register(options) {
        console.log(options);
        console.log(process.env.SECRET_KEY);
        return {
            module: JwtModule_1,
            providers: jwt_providers_1.createJwtProvider(options)
        };
    }

在 app.module.ts 我有

ConfigModule.forRoot({
      isGlobal: true,
    }),

node_modules 文件 (console.log(process.env.SECRET_KEY)) 中未定义 process.env.SECRET_KEY,但定义了 signOptions: { expiresIn: '60m' }。

如果我尝试从 .env 写入控制台 SECRET_KEY 其他任何地方都已定义,但在 node_modules 中未定义。

【问题讨论】:

    标签: nestjs dotenv


    【解决方案1】:

    ConfigModule的ConfigService运行dotenv的config()方法,但是所有的装饰器同时运行,所以config()方法还没有被调用。您可以改用异步注册并像这样使用ConfigService

    JwtModule.registerAsync({
      inject: [ConfigService],
      useFactory: (config: ConfigService) => ({
        secret: config.get('SECRET_KEY')
      })
    })
    

    【讨论】:

      【解决方案2】:

      确保在 App Module 构造函数中调用 ConfigService:

       export class AppModule {
        constructor(private configService: ConfigService) {}
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 2020-08-01
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多