问题描述
我正在使用 Joi 来验证对我的 API 的请求。
我正在努力实现以下目标:
- 如果平台为
aws
且引擎为premium
,则不应出现场距。 - 在其他情况下,场距是可选的,有效值为
default
、x-low
、low
、medium
、high
和 {{ 1}}。
我尝试过类似的方法,但对我不起作用。
x-high
知道如何使用 Joi 实现这一目标吗?
解决方法
您的何时应该与您的对象相关:
Joi.object({
platform: Joi.string().valid("aws","google","azure").required(),engine: Joi.string().valid("standard","premium").required(),pitch: Joi.string().valid('default','x-low','low','medium','high','x-high'),})
.when(Joi.object({ platform: Joi.valid('aws'),engine: Joi.valid('premium') }).unknown(),{
then: Joi.object({ pitch: Joi.forbidden() })
})
,
当平台为aws
且引擎为premium
时,此架构将使pitch被禁止 >
const pitch = Joi.when(
'platform',{
is: 'aws',then: Joi.when(
'engine',{
is: 'premium',then: Joi.forbidden(),otherwise: Joi.string().valid('default','x-high')
}
)
}
)
const schema = Joi.object({
platform: Joi.string().valid("aws",pitch
});