gpt4 book ai didi

nestjs - 使用 joi 进行自定义配置模块验证

转载 作者:行者123 更新时间:2023-12-02 08:58:45 24 4
gpt4 key购买 nike

因此,我按照有关如何为我的 Nest 应用创建配置的指南进行操作

https://docs.nestjs.com/techniques/configuration

由于我有很多配置部分,我想将这些部分拆分为多个配置服务。所以我的 app.module.ts 导入自定义配置模块

@Module({
imports: [CustomConfigModule]
})
export class AppModule {}

此自定义配置模块 (config.module.ts) 捆绑所有配置服务并加载 Nest 配置模块

@Module({
imports: [ConfigModule.forRoot()],
providers: [ServerConfigService],
exports: [ServerConfigService],
})
export class CustomConfigModule {}

最后,我有一个简单的配置服务server.config.service.ts,它返回应用程序正在运行的端口

@Injectable()
export class ServerConfigService {
constructor(private readonly configService: ConfigService) {}

public get port(): number {
return this.configService.get<number>('SERVER_PORT');
}
}

我想在应用程序启动时验证这些服务。该文档解释了如何为配置模块设置验证模式

https://docs.nestjs.com/techniques/configuration#schema-validation

在使用自定义配置模块时,如何将其用于我的服务验证?我是否必须在每个服务构造函数中调用 joi 并验证其中的属性?

提前致谢

最佳答案

我相信您的 ConfigModule.forRoot() 您可以设置验证架构并告诉 Nest 在启动时运行验证,而不必将其添加到每个自定义配置服务中。文档显示如下:

@Module({
imports: [
ConfigModule.forRoot({
validationSchema: Joi.object({
NODE_ENV: Joi.string()
.valid('development', 'production', 'test', 'provision')
.default('development'),
PORT: Joi.number().default(3000),
}),
validationOptions: {
allowUnknown: false,
abortEarly: true,
},
}),
],
})
export class AppModule {}

它将在 NODE_ENVPORT 上运行验证。当然,您可以将其扩展到更多总体验证。然后,您可以只拥有一个 ConfigModule,它具有较小的配置服务,可以将每个段分开,以便所有验证都在启动时运行,并且每个模块的上下文中只有您需要的内容可用。

关于nestjs - 使用 joi 进行自定义配置模块验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628934/

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