使用 joi 进行自定义配置模块验证
custom config module validation with joi
所以我按照有关如何为我的 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 其中 returns 应用程序 运行 在
上的端口
@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_ENV
和 PORT
上进行验证。您当然可以将其扩展到总体上进行更多验证。然后你可以只拥有一个 ConfigModule
,它具有较小的配置服务,将每个部分分开,因此所有验证都是 运行 在启动时,只有你需要的在每个模块的上下文中可用。
所以我按照有关如何为我的 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 其中 returns 应用程序 运行 在
上的端口@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_ENV
和 PORT
上进行验证。您当然可以将其扩展到总体上进行更多验证。然后你可以只拥有一个 ConfigModule
,它具有较小的配置服务,将每个部分分开,因此所有验证都是 运行 在启动时,只有你需要的在每个模块的上下文中可用。