[英]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.