javascript - Joi 嵌套模式和默认值

标签 javascript joi

我正在尝试让 Joi 在另一个引用的辅助模式上强制执行默认值。我有两个这样的模式:

const schemaA = Joi.object().keys({
  title: Joi.string().default(''),
  time: Joi.number().min(1).default(5000)
})

const schemaB = Joi.object().keys({
  enabled: Joi.bool().default(false),
  a: schemaA
})

我想要的是提供一个未定义 a 的对象,让 Joi 为它应用默认值,而不是像这样:

const input = {enabled: true}

const {value} = schemaB.validate(input)

//Expect value to equal this:
const expected = {
  enabled: true,
  a: {
    title: '',
    time: 5000
  }
}

问题在于,由于 key 是可选的,因此根本无法强制执行。所以我想要的是它是可选的,但如果不存在,则正确填充 schemaA 默认值。我一直在浏览文档,但似乎找不到任何关于此的信息,尽管我可能遗漏了一些明显的东西。有什么建议吗?

最佳答案

更新:2020 年 4 月。

现在,您可以在嵌套对象中使用 default()。这是 commit in repo与测试。

var schema = Joi.object({
                a: Joi.number().default(42),
                b: Joi.object({
                    c: Joi.boolean().default(true),
                    d: Joi.string()
                }).default()
            }).default();

关于javascript - Joi 嵌套模式和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46170082/

相关文章:

node.js - 是否在 Mongoose 良好实践之上使用 Joi 进行验证?

javascript - Joi 验证 : Capture the value passed in Custom Error Message

javascript - 检测 HTML 元素上的类无法正常工作

javascript - Laravel 5 Javascript 启用/禁用检测

java - AQL-在 Arangodb 中可以实现预期连接以及如何实现?

angularjs - 如何在 Angular 中执行 Hapi.js/Strongloop 验证?

javascript - 扩展 Joi 未实现自定义运算符

javascript - 如何使用 JS 滚动 Google 通讯录?

javascript - AngularJS 不会在 img 选项卡内渲染范围

javascript - 来自 Node JS 的用户定义的 javascript 函数