[英]Joi array Object validation based on root key value
我有一个复杂的场景,我想在这里使用Joi
进行验证,示例Joi对象模式
const itemSchema = Joi.object({
product_id: Joi.string().required(),
quantity: Joi.number().required().min(0)
});
let objSchema = {
items: Joi.array().items(itemSchema).required().min(1),
item_return_flag: Joi.string().optional().valid(true, false)
};
根据opon item_return_flag
键值true
或false
,我想更改items.quantity
最小值要求。 如果为true
,则数量为0,否则为1。
无论如何,有没有根据Joi
的根对象来控制数组中对象验证的定义
在我看来,您可以按照API文档进行如下操作:
let objSchema = {
items: Joi.array().items(Joi.object({
product_id: Joi.string().required(),
quantity: Joi.alternatives().when('item_return_flag', {
is: true, then: Joi.number().required().min(0),
otherwise: Joi.number().required().min(1)
})
})).required().min(1),
item_return_flag: Joi.string().optional().valid(true, false)
};
我不确定100%的结构正确无误,但这已经很接近了。 仅针对此类用例提供了Joi.alternatives()
。
该示例代码将基于父键item_return_flag
之一切换模式。 阵列的模式需要使用Joi.altertnatives()
进行切换
let itemArr = Joi.object({
product_id: Joi.string().required(),
quantity: Joi.number().required().min(0)
});
let itemArr2 = Joi.object({
product_id: Joi.string().required(),
quantity: Joi.number().required().min(1)
});
let itemSchema = Joi.alternatives()
.when('item_return_flag', { is: true, then: Joi.array().items(itemArr).required().min(1), otherwise: Joi.array().items(itemArr2).required().min(1)}) ;
let objSchema = {
items: itemSchema,
item_return_flag: Joi.string().optional().valid(true, false)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.