首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Joi倍数条件下

Joi倍数条件下
EN

Stack Overflow用户
提问于 2019-01-31 19:02:53
回答 1查看 3.5K关注 0票数 1

我想在我的身体里和Joi一起做一个验证,但是它似乎永远不会在相同的条件下工作和下降。所以如果我用这个发布

/elasticSearch?eType=scroll&scroll=1h:endPoint

身体:{}

这应该是抛出一个错误,因为eType是滚动,在本例中需要scroll_id,而不是null,而不是空。

即使我在上发布

/elasticSearch?eType=search&scroll=1h:endPoint

身体:{}

这应该会引发错误,因为eType是search,在本例中需要查询

所以有了这些密码

在一种情况下,它总是会通过,就像它没有验证一样--即使它们不应该通过我的意见;在第二种情况下,我得到了错误:需要查询,在我进行调用时一直需要scroll_id。

所以有人可以帮助我理解为什么这些验证是错误的?

谢谢

更新

默认情况下,如果我这样做:

代码语言:javascript
复制
body: 
  { 
    query: 
     Joi.alternatives()
     .when(Joi.ref('$query.eType'), 
      { 
       is: Joi.string().equal('search'), 
       then: Joi.required() 
      }
     ), 
   scroll_id: 
    Joi.alternatives() 
     .when(Joi.ref('$query.eType'), 
     { 
      is: Joi.string().equal('scroll'), 
      then: Joi.required() 
     }
    ) 
   }

这需要任何时候的查询和scroll_id。

EN

回答 1

Stack Overflow用户

发布于 2019-02-01 08:31:22

直接从文件中复制。

当使用Joi验证对象时,其他输入的值(即头、查询、参数、有效载荷和auth)在验证上下文下可用(在规则中作为Joi.ref('$query.key')).可访问)。

因此,在您的Joi.ref('$query.eType') eType引用中使用eType,因为您试图根据查询参数验证有效负载,在验证阶段,它们位于不同的作用域中。

代码语言:javascript
复制
Joi.alternatives()
   .when(Joi.ref('$query.eType'), {
     is: Joi.string().equal('search'),
     then: Joi.required()
   })
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54467550

复制
相关文章

相似问题

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