gpt4 book ai didi

nestjs - 为什么 .env 未定义?

转载 作者:行者123 更新时间:2023-12-04 07:32:55 24 4
gpt4 key购买 nike

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?

最佳答案

正如弗朗索瓦所说,您可以制作 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完成实例化并使用 ConfigService JwtModule 的实例化内部和 MognooseModule .
你也可以 use a configuration class而不是 useFactory , 但它们本质上是一样的。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com