使用 Joi 和 nodeJS 验证嵌套对象中的唯一键对

Aks*_*jka 6 javascript validation node.js joi

我有以下 JSON 结构:

{
  key1: "value1",
  key2: "value2",
  transactions: [
    {
      receiverId: '12341',
      senderId: '51634',
      someOtherKey: 'value'
    },
    {
      receiverId: '97561',
      senderId: '46510',
      someOtherKey: 'value'
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一些 Joi 代码来验证事务数组中的每个对象都是唯一的,即receiverId 和senderId 的组合只出现一次。交易数组中可以有可变数量的元素,但总是至少有 1 个。有什么想法吗?

小智 8

一个简单的方法:

const schema = Joi.object({
    transactions: Joi.array()
        .unique('receiverId')
        .unique('senderId')
        .required(),
});
Run Code Online (Sandbox Code Playgroud)

这样,它会为每个字段返回一个错误(ReceivedId一个错误, senderId另一个错误)


Chr*_*ian 5

您可以使用array.unique

const array_uniq_schema = Joi.array().unique((a, b) => a.receiverId === b.receiverId && a.senderId === b.senderId);
Run Code Online (Sandbox Code Playgroud)

因此,对于整个对象,架构将是(假设需要所有属性):

 const schema = Joi.object({
    key1: Joi.string().required(),
    key2: Joi.string().required(),
    transactions: array_uniq_schema.required(),
 });
Run Code Online (Sandbox Code Playgroud)