允许通过或不通过JOI验证传递某些密钥

时间:2019-07-15 16:19:57

标签: hapijs joi

尝试验证请求,在发出请求的某些时候,请求上可能有也可能没有某些对象。如何设置正确的选项以使Joi避免错误发生?即{“ statusCode”:400,“ error”:“ Bad Request”,“ message”:“ child \” B \“失败,因为[\” B \“必须是对象]”}

我似乎错误地使用了.optional()方法。我在架构中的一个对象上设置了optional(),以为它允许或不允许传递一个对象,但是如果未在请求中传递该对象,Joi似乎认为这是一个错误

validate: {
  payload: {
    A: Joi.object().keys({
      a1: Joi.string().allow('').optional(),
    }).allow(null).optional(),
    B: Joi.object().keys({
      b1: Joi.string().allow('').optional(),
    }).allow(null).optional(),
}

我希望以上内容可以让我传递

之类的有效负载
{
   A: { a1 : 'words' }
}

没有返回有关'B'的错误,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

在其他地方找到其他线程

Joi validation set default as empty object

在密钥上使用.default({})将使其通过验证。