首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Joi嵌套模式

Joi嵌套模式
EN

Stack Overflow用户
提问于 2016-04-20 17:27:22
回答 3查看 21.4K关注 0票数 25

我试图在joi中创建嵌套的模式,但是抛出了错误。

错误:对象架构不能是joi架构

代码语言:javascript
复制
var nestedSchema = joi.object({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData:joi.object(nestedSchema)
});

我应该如何在joi中定义嵌套模式?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-20 18:59:12

您可以使用object.keys应用程序接口

代码语言:javascript
复制
var nestedSchema = joi.object().keys({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData: nestedSchema
});
票数 34
EN

Stack Overflow用户

发布于 2017-03-03 18:04:10

虽然Francesco的答案是有效的,但没有必要使用object.keys()。问题创建者所犯的错误是将模式作为参数传递给joi.object()

因此,创建嵌套模式就像将一个模式分配给属于另一个模式的键一样简单。

代码语言:javascript
复制
const schemaA = Joi.string()
const schemaB = Joi.object({ keyB1: schemaA, keyB2: Joi.number() })
const schemaC = Joi.object({
  keyC1: Joi.string(),
  keyC2: schemaB  
})

Joi.validate({ keyC1: 'joi', keyC2: { keyB1: 'rocks!', keyB2: 3 } }, schemaC)
票数 38
EN

Stack Overflow用户

发布于 2019-01-23 22:43:10

这只是一个基于Francesco接受的答案的小贴士:

如果您需要"nestedData“作为必需参数,则”->“中的"nestedData: nestedSchema.required()”将不起作用,您需要像其他任何参数一样直接在"nestedSchema“上设置它

代码语言:javascript
复制
    var nestedSchema = joi.object().keys({
        b: joi.number()
    })
    .required();

    var base = joi.object({
        a: joi.string(),
        nestedData: nestedSchema
    });
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36739427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档