Joi:如何验证 2 个数组完全不同

问题描述

我有这个 Joi 对象架构

    const Joi = require('joi');

    const ruleSchema = Joi.object({  
       conditions: Joi.array()
          .items(Joi.string().required())
          .unique()
          .default([]),restrictions: Joi.array()
          .items(Joi.string().required())
          .unique()
          .default([]),});

我想验证限制条件没有任何共同的值。

我尝试使用 Joi.string().disallow(Joi.ref('conditions')) 但它没有用,Joi.string().disallow(...Joi.ref('conditions'))Joi.string().disallow(Joi.ref('..conditions')) 都没有。

解决方法

您可以使用 contextin

const Joi = require('@hapi/joi');

const schema = Joi.object({
    conditions: Joi.array()
          .items(Joi.string().required())
          .unique()
          .default([]),restrictions: Joi.array()
          .items(Joi.string().invalid(Joi.in('$conditions')))
          .unique()
          .default([])
});

const validObj = {
    conditions: ["a","b","c"],restrictions: ["d"]
};

const invalidObj = {
    conditions: ["a",restrictions: ["a"]
};

// VALID
schema.validate(validObj,{ context: validObj });
// INVALID
schema.validate(invalidObj,{ context: invalidObj });