[英]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.