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
包以及 ConfigModule
和 ConfigService
。为此,您应该使用异步注册方法,例如 registerAsync
和 forRootAsync
。然后你可以使用类似的配置
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/