簡體   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