Javascript Joi替换对象的深层嵌套递归数组验证
我尝试使用@hapi/Joi 16+验证以下json。它主要工作到3个级别。但在那之后,它将不会验证替代的Javascript Joi替换对象的深层嵌套递归数组验证,javascript,validation,recursion,joi,Javascript,Validation,Recursion,Joi,我尝试使用@hapi/Joi 16+验证以下json。它主要工作到3个级别。但在那之后,它将不会验证替代的文件文件夹schema得到验证。我希望优化的解决方案能够验证深层嵌套阵列 在这里,只有文件夹假定有可选的子文件夹。架构文件应不具有子项。因此,我正在使用替代品 const data = [{ id: '1', //UUID type: 'folder', children: [{ id: '2', //UUID type: 'folder',
文件
<代码>文件夹schema得到验证。我希望优化的解决方案能够验证深层嵌套阵列
在这里,只有文件夹假定有可选的子文件夹
。架构文件应不具有子项
。因此,我正在使用替代品
const data = [{
id: '1', //UUID
type: 'folder',
children: [{
id: '2', //UUID
type: 'folder',
children: []
},
{
id: '3', //UUID
type: 'file',
}, {
id: '4', //UUID
type: 'folder',
children: [{
id: '5', //UUID
type: 'folder',
children: [{
id: '7', //UUID
type: 'file'
}, {
id: '6', //UUID
type: 'folder',
children: [{
id: '7', //UUID
type: 'file'
}]
}]
}]
}
]
}]
JOI模式
import Joi from '@hapi/joi';
const validTypes = ['file', 'jpg'];
const files = Joi.object({
id: Joi.number().integer(),
type: Joi.string()
.valid(...validTypes)
.required()
});
const children = Joi.object({
children: Joi.array()
.items(Joi.alternatives(Joi.link('#children'), files))
.optional(),
type: Joi.string()
}).id('#children');
const fileSystem = Joi.object({
children: Joi.array().items(children),
id: Joi.number().integer(),
type: Joi.string()
.alphanum()
.required()
});
export const fileSystemSchema = Joi.array().items(fileSystem);