首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Joi嵌套时

Joi嵌套时
EN

Stack Overflow用户
提问于 2021-09-26 14:54:51
回答 1查看 411关注 0票数 0
代码语言:javascript
复制
const schema = {
    a: Joi.any(),
    b: Joi
      .boolean()
      .default(false),
    c: Joi
      .boolean()
      .default(false)
}

如何将上述Joi模式修正为与以下规则匹配

trueaforbidden,否则arequired,则bc之一可以是true,而bctrueaforbidden

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-28 06:19:37

代码语言:javascript
复制
Joi.object( {
  a: Joi
      .boolean()
      .default(false),
  b: Joi
      .boolean()
      .default(false),
  c: Joi.string().when(
    'a', {
      is: false,
      then: Joi.when(
        'b', {
          is: false,
          then: Joi.string().required()
        }
      )
    }
  ),
})

我在问问题之前尝试过嵌套when,但由于规则的顺序,它以前不起作用。

代码语言:javascript
复制
Joi.object( {
  c: Joi.string().when(
    'a', {
      is: false,
      then: Joi.when(
        'b', {
          is: false,
          then: Joi.string().required()
        }
      )
    }
  ),
  a: Joi
      .boolean()
      .default(false),
  b: Joi
      .boolean()
      .default(false),
})

第二个模式中的default值在when检查时没有设置,因此如果您验证一个空对象{},则第一个模式有Validation Error: "c" is required错误,而第二个Passed带有{a: false, b: false}

我在这里开了一期https://github.com/sideway/joi/issues/2683

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69336102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档