我有一个带有以下必需键的对象列表:
日期,时间,价格
我想添加一个可选键“ order”,并且如果这些对象之一包含该可选键,它们都必须。我将如何与joi进行验证?
答案 0 :(得分:0)
您可以根据要验证的阵列动态创建架构。如果数组具有某些具有order
属性的对象,则架构应要求数组中每个对象都具有此属性,否则,架构应将此属性视为可选:
const schemaFactory = input =>
Joi.array().items(
Joi.object().keys({
Date: Joi.required(),
Time: Joi.required(),
Price: Joi.required(),
order: input.some(item => item.hasOwnProperty('order'))
? Joi.required()
: Joi.optional()
})
)
const input = [
{ Date: 1, Time: 2, Price: 3 },
{ Date: 1, Time: 2, Price: 3, order: true },
]
const schema = schemaFactory(input)
const result = schema.validate(input)
if (result.error) {
console.log(result.error)
}
<script src="https://cdn.jsdelivr.net/npm/joi-browser@13.4.0/dist/joi-browser.min.js"></script>