根据 Joi 中其他多个参数的值设置请求参数的规则
Set rules for a request parameter based on the values of other multiple parameters in Joi
我正在使用 Joi 来验证对我的 API 的请求。
我正在努力实现以下目标:
- 如果平台是
aws
,引擎是premium
,那么场地间距不应该存在。
- 在其他情况下,场地间距是可选的,有效值为
default
、x-low
、low
、medium
、high
和x-high
.
我试过类似的方法,但它对我不起作用。
const schema = Joi.object({
platform: Joi.string().valid("aws","google","azure").required(),
engine: Joi.string().valid("standard","premium").required(),
pitch: Joi.when(Joi.object({platform: Joi.valid('aws'), engine: Joi.valid('premium')}),{
then: Joi.forbidden(),
otherwise: Joi.string().valid('default', 'x-low', 'low', 'medium', 'high', '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() })
})
当 platform 为 aws
且 engine[=] 时,此架构将禁止 pitch 18=] 是 premium
const pitch = Joi.when(
'platform', {
is: 'aws',
then: Joi.when(
'engine', {
is: 'premium',
then: Joi.forbidden(),
otherwise: Joi.string().valid('default', 'x-low', 'low', 'medium', 'high', 'x-high')
}
)
}
)
const schema = Joi.object({
platform: Joi.string().valid("aws", "google", "azure").required(),
engine: Joi.string().valid("standard", "premium").required(),
pitch
});
我正在使用 Joi 来验证对我的 API 的请求。
我正在努力实现以下目标:
- 如果平台是
aws
,引擎是premium
,那么场地间距不应该存在。 - 在其他情况下,场地间距是可选的,有效值为
default
、x-low
、low
、medium
、high
和x-high
.
我试过类似的方法,但它对我不起作用。
const schema = Joi.object({
platform: Joi.string().valid("aws","google","azure").required(),
engine: Joi.string().valid("standard","premium").required(),
pitch: Joi.when(Joi.object({platform: Joi.valid('aws'), engine: Joi.valid('premium')}),{
then: Joi.forbidden(),
otherwise: Joi.string().valid('default', 'x-low', 'low', 'medium', 'high', '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() })
})
当 platform 为 aws
且 engine[=] 时,此架构将禁止 pitch 18=] 是 premium
const pitch = Joi.when(
'platform', {
is: 'aws',
then: Joi.when(
'engine', {
is: 'premium',
then: Joi.forbidden(),
otherwise: Joi.string().valid('default', 'x-low', 'low', 'medium', 'high', 'x-high')
}
)
}
)
const schema = Joi.object({
platform: Joi.string().valid("aws", "google", "azure").required(),
engine: Joi.string().valid("standard", "premium").required(),
pitch
});