Joi 验证对象数组,这样只有一个对象具有特定的 属性
Joi validate array of objects, such that only one object has specific property
我已经阅读 Joi API doc 一段时间了,虽然我怀疑我想做的是可能的,但我没有看到解决方案。
鉴于以下情况,我如何验证只有一个 thing
具有 special
属性:
let thing = {
name: Joi.string(),
special: Joi.boolean(),
}
let manyThings = {
things: Joi.array().items(thing),
}
如果您同意让数组中的第一项成为具有 special
属性 的对象,您可以使用 array.ordered 并为后续对象。
var joi = require('joi');
var thingSchmea = joi.object().keys({
name: joi.string().required(),
special: joi.boolean().required()
});
var thingWithoutSpecialSchema = joi.object().keys({
name: joi.string().required()
});
var manyThingsSchema = joi.array().ordered(thingSchmea.required()).items(thingWithoutSpecialSchema);
var t = [
{
name: 'cuthbert',
special: true
},
{
name: 'roland',
special: true
},
{
name: 'jake'
},
{
name: 'susan'
}
];
var result = joi.validate(t, manyThingsSchema);
console.log(JSON.stringify(result, null, 2));
变量 t
将无法通过验证,因为数组中的第二项具有 special
属性。
我已经阅读 Joi API doc 一段时间了,虽然我怀疑我想做的是可能的,但我没有看到解决方案。
鉴于以下情况,我如何验证只有一个 thing
具有 special
属性:
let thing = {
name: Joi.string(),
special: Joi.boolean(),
}
let manyThings = {
things: Joi.array().items(thing),
}
如果您同意让数组中的第一项成为具有 special
属性 的对象,您可以使用 array.ordered 并为后续对象。
var joi = require('joi');
var thingSchmea = joi.object().keys({
name: joi.string().required(),
special: joi.boolean().required()
});
var thingWithoutSpecialSchema = joi.object().keys({
name: joi.string().required()
});
var manyThingsSchema = joi.array().ordered(thingSchmea.required()).items(thingWithoutSpecialSchema);
var t = [
{
name: 'cuthbert',
special: true
},
{
name: 'roland',
special: true
},
{
name: 'jake'
},
{
name: 'susan'
}
];
var result = joi.validate(t, manyThingsSchema);
console.log(JSON.stringify(result, null, 2));
变量 t
将无法通过验证,因为数组中的第二项具有 special
属性。