nestjs - 为什么 .env 未定义?

标签 nestjs

app.module.ts

@Module({
    imports: [
        ConfigModule.forRoot({
            isGlobal: true
        }),
        MongooseModule.forRoot(process.env.MONGO_DB_URI, {useFindAndModify: false}),
        UsersModule,
        RolesModule,
        AuthenticationModule,
        TwoFactorAuthModule,
        RememberPasswordModule,
        RegistrationLinkModule
    ],
    controllers: [AppController],
    providers: [AppService],
})
export class AppModule {}

身份验证.module.ts

@Module({
    imports: [
        JwtModule.register({
            secret: process.env.JWT_SECRET
        }),
        UsersModule,
        TwoFactorAuthModule,
        RememberPasswordModule,
        RegistrationLinkModule
    ],
    controllers: [AuthenticationController],
    providers: [AuthenticationService]
})
export class AuthenticationModule {}

在 AuthenticationModule process.env 中未定义。但如果我在 AuthenticationService 中使用它,它就可以正常工作。如何在模块文件中使用 process.env ?

最佳答案

正如 Francois 所说,您可以config() 方法设置为 main.ts 文件中的第一件事。请记住,在使用 process.env 导入任何具有装饰器的文件之前,必须完成此操作。

另一种选择是使用像 @golevelup/profiguration 这样的包,它类似于 dotenv 并且可以在装饰器内部使用。

Istiyak Tailor 引用的最后一个选项是使用 @nestjs/config 包以及 ConfigModuleConfigService。为此,您应该使用异步注册方法,例如 registerAsyncforRootAsync。然后你可以使用类似的配置

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

(与 MongooseModule 类似,但使用 forRootAsync 而不是 registerAsync)

这告诉 Nest 等待 ConfigModule 完成实例化,并在 JwtModule 实例化内部使用 ConfigService >MognooseModule.

您还可以use a configuration class而不是 useFactory,但它们本质上是相同的东西。

关于nestjs - 为什么 .env 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67867287/

相关文章:

node.js - 无法读取 NodeJS 中未定义的属性 'F_OK'

typescript - 自定义存储库中带有 Typeorm 事务的 Nestjs

node.js - 模块上下文中提供了如何修复索引 [0] 处的 AXIOS_INSTANCE_TOKEN

javascript - 如何在 Nestjs 中刷新 token

nestjs - NestJS mongoose 文档中的 `Cat.name` 是什么?

node.js - Nest.Js 不接受任何更改

node.js - 如何在 NestJS 中测试具有多个构造函数参数的服务

javascript - 在 NestJS 中添加 header HttpRequest

node.js - NestJS 如何将自定义 Logger 添加到自定义 ExceptionFilter

javascript - @ApiImplicitQuery swagger - 无法配置 'enum'