【发布时间】:2019-11-21 15:00:24
【问题描述】:
我有一个包含以下必需键的对象列表:
日期、时间、价格
我想添加一个可选键“order”,如果这些对象之一包含该可选键,它们都必须。我将如何使用 joi 进行验证?
【问题讨论】:
标签: javascript node.js rest joi
我有一个包含以下必需键的对象列表:
日期、时间、价格
我想添加一个可选键“order”,如果这些对象之一包含该可选键,它们都必须。我将如何使用 joi 进行验证?
【问题讨论】:
标签: javascript node.js rest joi
您可以根据要验证的数组动态创建架构。如果数组中有一些对象具有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>
【讨论】: