【问题标题】:Allow certain key to be passed or not passed through JOI validation允许某些键通过或不通过 JOI 验证
【发布时间】:2019-11-24 09:21:48
【问题描述】:

在尝试验证请求时,在某些时候发出请求时,可能会或可能不会在请求中提供某些对象。如何设置正确的选项以允许这种情况发生,而 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”的错误,但事实并非如此。

【问题讨论】:

    标签: hapijs joi


    【解决方案1】:

    寻找其他话题

    Joi validation set default as empty object

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

    【讨论】:

    • 您确定您的有效负载只有密钥“A”吗?我用您的有效负载示例测试了您的架构,它可以正常工作,没有错误。通过使用 default({}),您将强制您的有效负载始终具有一个带有空对象的键“B”。
    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2021-07-06
    • 2011-09-12
    • 2019-11-14
    • 2022-11-12
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多