JS Json Schema - AJV

时间:2018-04-04 11:56:56

标签: javascript ajv

我正在使用AJV(JS JSON Schema Validator),我正在尝试扩展它支持的类型。

我收到此错误,因为在架构中我有一个自定义类型(我在python中验证的DocumentReference - jsonschema)

Error: schema is invalid: data.properties['allow'].properties['custom_signature'].type should be equal to one of the allowed values, data.properties['allow'].properties['custom_signature'].type[0] should be equal to one of the allowed values, data.properties['allow'].properties['custom_signature'].type should match some schema in anyOf
    at Ajv.validateSchema (ajv.js?ea76:183)
    at Ajv._addSchema (ajv.js?ea76:312)
    at Ajv.compile (ajv.js?ea76:112)
    at eval (configs.js?76ed:66)

这是架构的一小部分示例:

"custom_signature": {
    "type": [
        "DocumentReference",
        "object",
        "null"
    ]
},

在python jsonschema中,有一种方法可以扩展类型并定义你想如何验证它们,AJV中有一些等价物吗?

var json = {
  "type": "object",
  "properties": {
    "custom_signature": {
      "type": [
        "DocumentReference",
        "null",
        "object"
      ]
    }
  }
};

const ajv = new Ajv({
  allErrors: true
});
console.log(ajv);
const validate = ajv.compile(json);
console.log(validate({'custom_signature': {}}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.4.0/ajv.min.js"></script>

JSFiddle

1 个答案:

答案 0 :(得分:0)

我刚刚制作了一个模块来简化一些AJV问题。它还包括一个名为.addType()的新函数:

Github:https://github.com/webarthur/super-ajv

NPM:https://www.npmjs.com/package/super-ajv

const ajv = new Ajv()

ajv.addType('mongoid', {
  compile: function () {
    return function (data) {
      const re = /^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)/i
      return re.test(data)
    }
  }
})

const schema = {
  properties: {
    user_id: { type: 'mongoid' }
  }
}

您还可以:

const schema = {
  properties: {
    '*name': 'string',
    '*email': 'email',
    'age': 'number',
    '*message': 'string',
  }
}

享受!