Joi 嵌套模式

新手上路,请多包涵

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

[错误:对象模式不能是 joi 模式]

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

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

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

原文由 Anshul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 462
2 个回答

你可以使用 object.keys API

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

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

原文由 Francesco Pezzella 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Túbal Martín 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题