Ajv-модуль NodeJS всегда регистрирует сообщение "$ref: ключевые слова игнорируются в схеме по пути"#""
Я использую AJV для проверки запроса тела. С каждым приходящим запросом работает ajv, но он всегда записывает сообщение " $ref: ключевые слова игнорируются в схеме по пути"#" ".
У меня есть 2 схемы, login.json и login.defs.json
login.defs.json для определения общего определения схемы, а login.json ссылается на него.
login.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"$id": "http://blog-js.com/login.schema#",
"$ref": "login.defs#/definitions/login"
}
login.defs.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://blog-js.com/login.defs#",
"additionalProperties": false,
"definitions": {
"login": {
"type": "object",
"required": [
"account",
"password"
],
"properties": {
"account": {
"description": "The account or email of user",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"password": {
"description": "The password of user",
"type": "string",
"minLength": 1,
"maxLength": 32
}
}
}
}
}
Скажите пожалуйста, что я не так сделал?
1 ответ
Решение
Я думаю, это потому, что у вас есть additionalProperties
Ключевое слово установлено не в том месте, и Ajv просто говорит вам об этом.
Вы не должны видеть это сообщение, если это была схема для login.json
,
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://blog-js.com/login.schema#",
"$ref": "login.defs#/definitions/login"
}
За login.defs.json
это ключевое слово должно принадлежать схеме для login
:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://blog-js.com/login.defs#",
"definitions": {
"login": {
"type": "object",
"required": [
"account",
"password"
],
"properties": {
"account": {
"description": "The account or email of user",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"password": {
"description": "The password of user",
"type": "string",
"minLength": 1,
"maxLength": 32
}
},
"additionalProperties": false
}
}
}