问题描述
我试图让架构来验证这样的json:
{
"integration": { "module": [ "m" ] },"tile": {
"title": "TTT","text": "ttt","icon": "./resources/main-icon.png","tags": [ "bbb","vvvv"],"orderNumber": 20
},"steps": {
"order": [
"1","2","3"
],"data": {
"1": {
"title": "tt1","description": "","screens": { "default": "true" }
},"2": {
"title": "tt2","3": {
"title": "tt3","screens": { "default": "true" }
}
}
}
};
架构:
Joi.object({
integration: Joi.object({
module: Joi.array().items(Joi.string().valid('m').required())
}).required(),tile: Joi.object({
title: Joi.string().required(),text: Joi.string().required(),icon: Joi.string().required(),tags: Joi.array().items(Joi.string()).required(),orderNumber: Joi.number().integer().min(1).max(255).required()
}).required(),steps: Joi.object({
order: Joi.array().items(Joi.string()).required(),data: Joi.object().keys({
title: Joi.string().required(),description: Joi.string().required(),screens: Joi.object({
default: Joi.string().valid('true','false').required()
}).required()
}).unkNown(),}).required()
});
但它产生错误:
验证错误:“steps.data.title”是必需的。 “steps.data.description”是必需的。 “steps.data.screens”是必需的
请帮忙。我怎样才能制作这个架构?
解决方法
您的数据键是一个带有键 1、2 和 3 的对象,每个键也是一个带有键标题、描述和屏幕的对象。
但是在您的验证中,您的数据键是一个带有键标题、描述和屏幕的对象,这是不正确的。
您应该将您的 steps.data 验证更改为:
data: Joi.object().pattern(
Joi.string().valid("1","2","3"),Joi.object().keys({
title: Joi.string().required(),description: Joi.string().required().allow(''),screens: Joi.object({ default: Joi.string().valid('true','false').required() }),})).unknown(),}).required()
我使用 Joi.object().pattern 来避免重复代码,因为每个键的对象值都相同。
我还更改了您的 data.description,因为您不允许使用空字符串,所以我只添加了 .allow('')。