根据Joi中其他多个参数的值为一个请求参数设置规则

问题描述

我正在使用 Joi 来验证对我的 API 的请求。

我正在努力实现以下目标:

  1. 如果平台为 aws 且引擎为 premium,则不应出现场距。
  2. 在其他情况下,场距是可选的,有效值为 defaultx-lowlowmediumhigh 和 {{ 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
});