AJV 8.6.2切换draft-09导出时提示无对应schema引用错误如何解决
问题原因
AJV 8.x的各版本专属命名导出仅内置对应规范版本的核心元schema,不会默认加载其他版本的元schema。你遇到两类报错分别对应两个问题:
- 切换为draft-09导出后报draft-07 schema找不到,是因为现有schema中仍有
$schema字段引用了draft-07的元schema地址,当前AJV实例未注册该schema - 你手动切换为draft-09引用后仍报错,是因为draft 2019-09(即俗称的draft-09)的官方元schema标准id为
https://json-schema.org/draft/2019-09/schema,你使用的https://json-schema.org/draft-09/schema不是官方标准id,AJV内置的draft-09元schema没有对应这个地址。
解决方案
根据你的使用场景二选一即可:
场景1:所有schema已完全迁移到draft-09规范
将所有schema中的$schema字段值统一修改为标准id https://json-schema.org/draft/2019-09/schema即可。
如果不想批量修改原有schema中的地址,可在实例化AJV后新增别名映射:
import Ajv2019 from "ajv/dist/2019" const ajv = new Ajv2019() // 给draft-09的元schema增加别名 ajv.addSchema(ajv.getSchema("https://json-schema.org/draft/2019-09/schema").schema, "https://json-schema.org/draft-09/schema")
场景2:需要同时兼容draft-07和draft-09的schema
在实例化AJV后手动注册draft-07的元schema即可:
import Ajv2019 from "ajv/dist/2019" import draft7MetaSchema from "ajv/dist/refs/json-schema-draft-07" const ajv = new Ajv2019() ajv.addMetaSchema(draft7MetaSchema) // 如有需要也可以同时加上文的draft-09别名配置
内容的提问来源于stack exchange,提问作者Adam Jenkins
相关产品推荐
相关产品推荐

