使用when时的简单joi架构不起作用

时间:2016-11-23 04:47:17

标签: javascript node.js joi

我希望以下内容能够输出错误:

var joi = require('joi');

var schema = {
  role_type: joi.string(),
  info: {
    address: joi.object({
      postal_code: joi.string(),
      country: joi.string().uppercase().length(2)
    })
      .when('role_type', {
        is: 'org', // When role_type is "org" the address props become required
        then: {
          postal_code: joi.required(),
          country: joi.required()
        }
      })
  }
};

var data = {
  role_type: 'org',
  info: {address: {country: 'AF'}}
};

joi.assert(data, schema);

不幸的是,上面的代码没有产生任何错误。为什么呢?

在joi v6和最新的v10上进行了测试。

1 个答案:

答案 0 :(得分:0)

结果显示一个can't reference父对象数据:

  

引用不能指向对象树,只能指向兄弟键,但它们可以指向它们的兄弟姐妹'儿童

最简单的解决方法是将.when()向上移动一级,以便joi(深度)合并两个info子模式

var schema = {
  role_type: joi.string(),
  info: joi.object({
    address: joi.object({
      postal_code: joi.string(),
      country: joi.string().uppercase().length(2)
    })
  })
    .when('role_type', {
      is: 'org',
      then: joi.object({
        address: joi.object({
          postal_code: joi.required(),
          country: joi.required()
        })
      })
    })
};