【问题标题】:Joi validate array of objects, such that only one object has specific propertyJoi 验证对象数组,使得只有一个对象具有特定属性
【发布时间】:2016-08-05 08:03:05
【问题描述】:

我已经阅读Joi API doc 有一段时间了,虽然我怀疑我想做的事情是可能的,但我没有看到解决方案。

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

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

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

【问题讨论】:

    标签: javascript validation joi


    【解决方案1】:

    如果您可以将数组中的第一项设为具有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 验证这样的复杂案例。因此,我为不适合 Joi 的情况添加了另一个验证层。
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2016-10-11
    相关资源
    最近更新 更多