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 许可协议

阅读 456
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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题