繁体   English   中英

基于根键值的Joi数组对象验证

[英]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键值truefalse ,我想更改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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM