代码之家  ›  专栏  ›  技术社区  ›  made_in_india

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

  •  0
  • made_in_india  · 技术社区  · 7 年前

    我有一个复杂的场景,我想用 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 最小值要求。什么时候? ,数量为0,否则为1。

    乔伊

    2 回复  |  直到 7 年前
        1
  •  2
  •   C. S.    6 年前

    将基于架构的转换为父密钥的示例代码 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)
    };
    
        2
  •  1
  •   Chad Moore    7 年前

    API docs ,执行以下操作:

    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)
    };
    

    我不能百分之百确定那是正确的结构,但它很接近。这个 Joi.alternatives()

    推荐文章