使用 JOI 如何定义具有 n 深度的对象验证递归数组

Gan*_*che 6 joi

let obj = Joi.object().keys({
      "id":  Joi.string().required(),
      "array": Joi.array().items(obj).required()//array contains multiple
});
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在 JOI 中定义递归数组验证 obj.array 包含 n 个 obj

Ank*_*nkh 9

递归模式可以使用 Joi 的lazy(fn)函数来实现。文档中的以下示例可以适应您的架构,但是我不确定您如何定义最大深度。

const Person = Joi.object({
    firstName: Joi.string().required(),
    lastName: Joi.string().required(),
    children: Joi.array().items(Joi.lazy(() => Person).description('Person schema'))
});
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您使用 Joi 16.0.0 或更高版本,Joi.lazy() 函数已重命名为 Joi.link() 更改:https://github.com/hapijs/joi/issues/1968 文档:https:// /hapi.dev/module/joi/api/?v=17.1.1#linkref (8认同)