【问题标题】:Joi validating list of objects where all must contain optional key if it is in one objectJoi 验证对象列表,如果它在一个对象中,则所有对象都必须包含可选键
【发布时间】:2019-11-21 15:00:24
【问题描述】:

我有一个包含以下必需键的对象列表:

日期、时间、价格

我想添加一个可选键“order”,如果这些对象之一包含该可选键,它们都必须。我将如何使用 joi 进行验证?

【问题讨论】:

    标签: javascript node.js rest joi


    【解决方案1】:

    您可以根据要验证的数组动态创建架构。如果数组中有一些对象具有order 属性,那么模式应该要求数组中每个对象的这个属性,否则,模式应该将此属性视为可选:

    const schemaFactory = input =>
      Joi.array().items(
        Joi.object().keys({
          Date: Joi.required(),
          Time: Joi.required(),
          Price: Joi.required(),
          order: input.some(item => item.hasOwnProperty('order'))
            ? Joi.required()
            : Joi.optional()
        })
      )
    
    const input = [
      { Date: 1, Time: 2, Price: 3 },
      { Date: 1, Time: 2, Price: 3, order: true },
    ]
    
    const schema = schemaFactory(input)
    const result = schema.validate(input)
    
    if (result.error) {
      console.log(result.error)
    }
    <script src="https://cdn.jsdelivr.net/npm/joi-browser@13.4.0/dist/joi-browser.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2021-04-17
      • 2017-08-05
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2018-01-13
      • 2018-06-14
      • 2022-12-12
      相关资源
      最近更新 更多