【问题标题】:Joi Nested schemaJoi 嵌套模式
【发布时间】:2016-08-12 20:58:06
【问题描述】:

我正在尝试在 joi 中创建嵌套模式,但它抛出错误

[错误:对象架构不能是 joi 架构]

var nestedSchema = joi.object({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData:joi.object(nestedSchema)
});

我应该如何在 joi 中定义嵌套模式?

【问题讨论】:

    标签: javascript node.js joi


    【解决方案1】:

    你可以使用object.keys API

    var nestedSchema = joi.object().keys({
        b: joi.number()
    });
    
    var base = joi.object({
        a: joi.string(),
        nestedData: nestedSchema
    });
    

    【讨论】:

    • 谢谢...但是有一个错字。它应该是 joi.object().keys 而不是 joi.object.keys
    【解决方案2】:

    虽然 Francesco 的回答有效,但没有必要使用 object.keys()。问题创建者所做的错误是将模式作为参数传递给joi.object()

    因此,创建嵌套模式就像将模式分配给属于另一个模式的键一样简单。

    const schemaA = Joi.string()
    const schemaB = Joi.object({ keyB1: schemaA, keyB2: Joi.number() })
    const schemaC = Joi.object({
      keyC1: Joi.string(),
      keyC2: schemaB  
    })
    
    Joi.validate({ keyC1: 'joi', keyC2: { keyB1: 'rocks!', keyB2: 3 } }, schemaC)
    

    【讨论】:

    • 使用这种方法你会如何要求keyB1:
    【解决方案3】:

    只是基于 Francesco 接受的答案的提示:

    如果您需要“nestedData” ->“base”中的“nestedData:nestedSchema.required()”将不起作用,您需要像任何其他参数一样直接在“nestedSchema”上设置它

        var nestedSchema = joi.object().keys({
            b: joi.number()
        })
        .required();
    
        var base = joi.object({
            a: joi.string(),
            nestedData: nestedSchema
        });
    

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2018-02-20
      • 1970-01-01
      • 2020-06-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      相关资源
      最近更新 更多