javascript - 如何通过 Joi 模式验证进行多个唯一检查?

标签 javascript validation joi

我有数据:

const mockScenario1 = {
  drawingNode: {
    moduleRackOutputs: [
      {
        moduleId: 'module1',
        tilt: 'tilt1',
        rack: {
          framingType: 'framing1'
        }
      },
      {
        moduleId: 'module2',
        tilt: 'tilt1',
        rack: {
          framingType: 'framing1'
        }
      }
    ]
  }
}

我想确保:

  • 如果有不同的 moduleId 值,我希望:仅允许一个模块
  • 如果有不同的 rack.framingType 值,我希望:仅允许一种框架类型

我有这样的开始:

Joi.object({
  drawingNode: Joi.object({
    moduleRackOutputs: Joi.array()
      .items(
        Joi.object().keys({
          moduleId: Joi.string().required(),
          tilt: Joi.string().required(),
          rack: Joi.object({
            framingType: Joi.string().required()
          })
        })
      )
      .unique((a, b) => a.moduleId !== b.moduleId)
      .messages({
        'array.unique':
          'The drawing contains more than one module type. Multiple module types are not yet supported by the PVsyst RPA.'
      })
  })
})

这适用于模块,但不适用于 framingType。看来我不能使用多个unique

我希望得到任何帮助或指点。谢谢!

最佳答案

这是解决方案。我希望这会有所帮助。

Joi.object({
   drawingNode: Joi.object({
     moduleRackOutputs: 
     Joi.array().unique('moduleId').unique('rack.framingType')
     .messages({
        'array.unique':
        'The drawing contains more than one module type. Multiple module types are not yet supported by the PVsyst RPA.'
        })
      })
     })

Joi.object({
  drawingNode: Joi.object({
  moduleRackOutputs: Joi.array()
  .items(
    Joi.object().keys({
      moduleId: Joi.string().required(),
      tilt: Joi.string().required(),
      rack: Joi.object({
        framingType: Joi.string().required()
      })
    })
  )
  .unique((a, b) => a.moduleId === b.moduleId || a.rack.framingType === b.rack.framingType)
  .messages({
    'array.unique':
      'The drawing contains more than one module type. Multiple module types are not yet supported by the PVsyst RPA.'
   })
 })
})

关于javascript - 如何通过 Joi 模式验证进行多个唯一检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70671366/

相关文章:

c - 在 C 中返回文本文件中的部分行

mongodb - 如何验证 ObjectID

javascript - IE9 中未定义“存储”

javascript - Formik 处理对象数组

javascript - 验证提供的值是否是 Lodash 的实例

php - 包罗万象的MySQL数据验证

jquery - ASP.NET MVC 4 : client validation not work

javascript - 使用每个数组中的一个值来转换和连接多个数组

javascript - Joi 中可选条件的模式

typescript - isJoi = 真;语法错误 : Unexpected token =