4

我不明白如何正确引用其他架构。我使用了 ajv,并且有接下来的两个模式

第一个架构不正确-email.json:

{
  "title": "Не корректный email",
  "properties": {
    "status": {
      "description": "Статус операции",
      "type": "integer",
      "enum": [68]
    },
    "error": {
      "$ref":"error.json"
    }
  },
  "required":["status", "error"],
  "additionalProperties": false
}

第二个模式error.json:

{
  "type": "array",
  "minItems": 2,
  "items": {
    "type": "object",
    "properties": {
      "description_ru": {
        "description": "Информация об ошибке на русском языке",
        "type": "string"
      },
      "description_en": {
        "description": "Информация об ошибке на английском языке",
        "type": "string"
      }
    },
    "additionalProperties": false
  }
}

运行测试后我得到这个错误

Error: can't resolve reference error.json from id # Mine 验证方法:

var valid = ajv.validate(require("../schema/login/incorrect-email.json"), data);

我需要参考本地架构 error.json,而不是远程服务器等。请告诉我,我可以在此架构中添加 id 和 $ref 以使用 ajv 正确解析

4

1 回答 1

2

在不更改架构文件的情况下,您可以执行以下操作:

ajv.addSchema(require('./incorrect-email.json', 'incorrect-email.json'));
ajv.addSchema(require('./error.json'), 'error.json');
var valid = ajv.validate('incorrect-email.json', data);

您可以在模式本身中指定 ID 属性,而不是在 addSchema 调用中指定模式 ID(推荐)。在任何情况下,默认情况下 Ajv 都不会使用任何 IO 来加载模式,模式必须使用 addSchema 方法预加载。当您使用 compileAsync 方法时,您可以动态(和异步)加载模式,但您必须自己指定加载机制(可以是任何东西 - fs、http 等)。

于 2016-11-09T02:56:15.350 回答