hapijs joi 验证,只验证一个字段并允许任何字段

Posted

技术标签:

【中文标题】hapijs joi 验证,只验证一个字段并允许任何字段【英文标题】:hapijs joi validation , just validate one field and to allow any field 【发布时间】:2017-01-22 17:29:16 【问题描述】:

我想验证一个字段并允许另一个字段不进行验证;例如只是为了验证:“名字”字段。在我的代码中,当我评论“有效负载”时,hapi 允许我记录任何字段,当我取消注释“有效负载”时,hapijs 不允许我记录任何字段,但我只想通过示例验证“名字”是否为“字符串”并且让其余字段允许。我打算让变量字段符合数据库配置,所以我将只验证一些固定字段并让保存在前端控制的另一个变量字段,而不是在后端

  config: 
      validate: 
         /* payload: 
            firstname: Joi.string(),
            lastname: Joi.string()
            ...anothers fields...

          */
      
  

更新: 感谢 Robert K. Bell,我调整的解决方案是添加“验证”:

  config: 
      validate: 
         options: 
            allowUnknown: true
          ,
          payload: 
            firstname: Joi.string()
          
      
  

【问题讨论】:

【参考方案1】:

您可能正在寻找.unknown() method:

object.unknown([allow])

仅覆盖当前对象范围内未知键的处理(不适用于子对象),其中:

allow - 如果false,则不允许使用未知键,否则将忽略未知键。

js const schema = Joi.object( a: Joi.any() ).unknown();

【讨论】:

谢谢,我将根据我的配置编辑我的答案;我必须使用“选项”,但它是相同的 unknown() 方法【参考方案2】:
  config: 
      validate: 
        payload: Joi.object(
            'firstname': Joi.string(),
        ).options( allowUnknown: true )
      
  

直接使用 Joi 对象验证有效负载,而不是在 validate 中添加验证字段。它接受 allowUnknown true 使用它只会验证 Joi 对象中提到的字段。

【讨论】:

您能补充说明吗?谢谢!

以上是关于hapijs joi 验证,只验证一个字段并允许任何字段的主要内容,如果未能解决你的问题,请参考以下文章

Joi 验证 - 与 POST 中的日期进行比较

JOI:允许数组中的空值

Joi 验证模式 - 两个字段不能具有相同的值

使用 Joi,要求两个字段之一不为空

Joi 验证 - 如何根据数组中存在的另一个键来要求或可选字段?

NPM 模块收集