Joi:如何验证两个数组是完全不同的



我有这个Joi对象模式

// const Joi = require('joi');
const Joi = window.joi;
// console.log(Object.keys(Joi))
const ruleSchema = Joi.object({  
conditions: Joi.array()
.items(Joi.string().required())
.unique()
.default([]),
restrictions: Joi.array()
.items(Joi.string().required())
.unique()
.default([]),
});
<script src="https://cdn.jsdelivr.net/npm/joi@17.10.0/dist/joi-browser.min.js"></script>

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

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

根据你的回答,我会尝试这样做

const Joi = require('joi');
const ruleSchema = Joi.object({  
conditions: Joi.array()
.items(Joi.string().required())
.unique()
.default([]),
restrictions: Joi.array()
.items(Joi.string().required().valid(Joi.not(Joi.in('$conditions'))))
.unique()
.default([]),
});

中。In创建一个数组引用

中。Not否定它

中。Valid检查有效值

你可以使用context和in:

// const Joi = require('@hapi/joi');
const Joi = window.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", "b", "c"],
restrictions: ["a"],
};
console.log(
'valid ...',
schema.validate(validObj, { context: validObj })
);
console.log(
'invalid ...',
schema.validate(invalidObj, { context: invalidObj })
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
<script src="https://cdn.jsdelivr.net/npm/joi@17.10.0/dist/joi-browser.min.js"></script>

最新更新