Joi 嵌套模式
Posted
技术标签:
【中文标题】Joi 嵌套模式【英文标题】:Joi Nested schema 【发布时间】: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 中定义嵌套模式?
【问题讨论】:
【参考方案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
);
【讨论】:
以上是关于Joi 嵌套模式的主要内容,如果未能解决你的问题,请参考以下文章