繁体   English   中英

Joi多重条件

[英]Joi multiple when condition

我想对Joi进行身体验证,但似乎永远无法正常工作,并且始终处于同一状态。 所以,如果我这个职位

终点: / elasticSearch?eType = scroll&scroll = 1h

身体:{}

这应该抛出一个错误,因为VLAN时是滚动在这种情况下scroll_id需要被需要,不为空,不为空。

甚至当我张贴这种

终点: / elasticSearch?eType = search&scroll = 1h

身体:{}

会引发错误,因为eType是搜索 ,在这种情况下,需要查询

因此,有了这些代码,

在一种情况下,它总是总是像没有验证一样通过,即使我认为他们不应该通过也是如此。在第二种情况下,我得到了错误:需要查询,并且在我打电话时始终需要scroll_id。

因此有人可以帮助我了解为什么这些验证错误吗?

谢谢

更新资料

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

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。

直接从文档复制。

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

因此,请在eType引用中使用Joi.ref('$query.eType') ,因为您试图根据查询参数来验证有效负载,因此在验证阶段,它们位于单独的范围内。

Joi.alternatives()
   .when(Joi.ref('$query.eType'), {
     is: Joi.string().equal('search'),
     then: Joi.required()
   })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM