Javascript 当条件满足时,Joi倍数
我想用Joi在我的身体里做一个验证,但它似乎永远不会在相同的条件下工作和下落。 所以如果我用这个发布 端点:/elasticSearch?eType=scroll&scroll=1h 正文:{} 它应该抛出一个错误,因为eType是scroll,在本例中scroll\u id必须是必需的,不能为null,也不能为空 即使当我用这个发布 端点:/elasticSearch?eType=search&scroll=1h 正文:{} 这应该抛出一个错误,因为eType是search,在本例中需要query 所以有了这些代码 在一种情况下,它总是像没有验证一样通过,即使我认为它们不应该通过,在第二种情况下,我得到了错误:查询是必需的,当我打电话时,滚动id一直是必需的 所以有人可以帮助我理解为什么这些验证是错误的 谢谢 更新 默认情况下,如果我这样做:Javascript 当条件满足时,Joi倍数,javascript,node.js,validation,hapijs,joi,Javascript,Node.js,Validation,Hapijs,Joi,我想用Joi在我的身体里做一个验证,但它似乎永远不会在相同的条件下工作和下落。 所以如果我用这个发布 端点:/elasticSearch?eType=scroll&scroll=1h 正文:{} 它应该抛出一个错误,因为eType是scroll,在本例中scroll\u id必须是必需的,不能为null,也不能为空 即使当我用这个发布 端点:/elasticSearch?eType=search&scroll=1h 正文:{} 这应该抛出一个错误,因为eType是search,在本例中需要que
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()
}
)
}
这需要随时查询和滚动id。直接从文档中复制 使用Joi验证对象时,其他输入的值 (即标题、查询、参数、有效负载和身份验证)可用 在验证上下文下(在规则中可作为 Joi.ref(“$query.key”) 因此,在eType引用中使用
Joi.ref(“$query.eType”)
,因为您正试图根据查询参数验证有效负载,在验证阶段,它们位于不同的作用域中
Joi.alternatives()
.when(Joi.ref('$query.eType'), {
is: Joi.string().equal('search'),
then: Joi.required()
})
直接从文档中复制 使用Joi验证对象时,其他输入的值 (即标题、查询、参数、有效负载和身份验证)可用 在验证上下文下(在规则中可作为 Joi.ref(“$query.key”) 因此,在eType引用中使用
Joi.ref(“$query.eType”)
,因为您正试图根据查询参数验证有效负载,在验证阶段,它们位于不同的作用域中
Joi.alternatives()
.when(Joi.ref('$query.eType'), {
is: Joi.string().equal('search'),
then: Joi.required()
})
如何知道使用Joi.ref($…)是否正确获取值如何知道使用Joi.ref($…)是否正确获取值