Joi嵌套模式

时间:2016-04-20 09:27:22

标签: javascript node.js joi

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

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

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

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

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

3 个答案:

答案 0 :(得分:17)

尽管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)

答案 1 :(得分:11)

您可以使用object.keys API

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

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

答案 2 :(得分:0)

仅是弗朗切斯科接受的答案的提示:

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

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

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