Joi验证对象数组,这样只有一个对象具有特定属性

时间:2016-04-14 00:19:29

标签: javascript validation joi

我一直在阅读Joi API doc一段时间&虽然我怀疑我想做什么是可能的,但我没有看到解决方案。

鉴于以下内容,我如何验证只有一个thing具有special属性:

let thing = {
  name: Joi.string(),
  special: Joi.boolean(),
}

let manyThings = {
  things: Joi.array().items(thing),
}

1 个答案:

答案 0 :(得分:2)

如果您可以将数组中的第一项作为具有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属性。