Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Joi替换对象的深层嵌套递归数组验证_Javascript_Validation_Recursion_Joi - Fatal编程技术网

Javascript Joi替换对象的深层嵌套递归数组验证

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',

我尝试使用@hapi/Joi 16+验证以下json。它主要工作到3个级别。但在那之后,它将不会验证替代的
文件
<代码>文件夹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);