我想在我的身体里和Joi一起做一个验证,但是它似乎永远不会在相同的条件下工作和下降。所以如果我用这个发布
/elasticSearch?eType=scroll&scroll=1h:endPoint
身体:{}
这应该是抛出一个错误,因为eType是滚动,在本例中需要scroll_id,而不是null,而不是空。
即使我在上发布时
/elasticSearch?eType=search&scroll=1h:endPoint
身体:{}
这应该会引发错误,因为eType是search,在本例中需要查询。
所以有了这些密码
在一种情况下,它总是会通过,就像它没有验证一样--即使它们不应该通过我的意见;在第二种情况下,我得到了错误:需要查询,在我进行调用时一直需要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。
发布于 2019-02-01 08:31:22
直接从文件中复制。
当使用Joi验证对象时,其他输入的值(即头、查询、参数、有效载荷和auth)在验证上下文下可用(在规则中作为Joi.ref('$query.key')).可访问)。
因此,在您的Joi.ref('$query.eType') eType引用中使用eType,因为您试图根据查询参数验证有效负载,在验证阶段,它们位于不同的作用域中。
Joi.alternatives()
.when(Joi.ref('$query.eType'), {
is: Joi.string().equal('search'),
then: Joi.required()
})https://stackoverflow.com/questions/54467550
复制相似问题