Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当条件满足时,Joi倍数_Javascript_Node.js_Validation_Hapijs_Joi - Fatal编程技术网

Javascript 当条件满足时,Joi倍数

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

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

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

正文:{}

它应该抛出一个错误,因为eType是scroll,在本例中scroll\u id必须是必需的,不能为null,也不能为空

即使当我用这个发布

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

正文:{}

这应该抛出一个错误,因为eType是search,在本例中需要query

所以有了这些代码

在一种情况下,它总是像没有验证一样通过,即使我认为它们不应该通过,在第二种情况下,我得到了错误:查询是必需的,当我打电话时,滚动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() 
     }
    ) 
   }

这需要随时查询和滚动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($…)是否正确获取值