Я использую json-схему с бэкэндом nodeJs под названием 'feathers-plus', который проверяет данные с помощью популярного ajv.
У меня есть два объекта -> ObjectA & ObjectB, где ObjectA является родителем.ObjectA содержит коллекцию ObjectB с произвольными именами, определенными patternProperties и объектами:
exchanges: {
type: 'object',
patternProperties: {
"^[A-Za-z]+$": {
type: 'object'
}
},
additionalProperties: false
},
ObjectB (в моем случае это обмен) начинаются с этого имени произвольного ключа на верхнем уровне и затем содержатсамо по себе больше свойств (на втором уровне и т. д.).
Проблема в том, что я не знаю, как определить имена этих произвольных ключей.Я знаю, как определить его на втором уровне и глубже, используя приведенный выше пример для бирж.Но, пожалуй, я не могу написать что-то вроде этого:
"^[A-Za-z]+$": {
type: 'object'
}
С помощью перьев плюс мы можем разделить наши логические объекты в сервисах.В моем случае, топ-сервис называется «конфиги», а дочерний «обменивается».
Любая помощь будет благодарна.
Спасибо!
РЕДАКТИРОВАТЬ: в соответствии с просьбой, я публикую свои текущие схемы для обоих объектов:
Родительский объект A ->
let schema = {
title: 'Configs',
description: 'Configs database.',
required: [
'name',
'bot',
'GUI',
'ws',
'createdAt',
'updatedAt'
],
uniqueItemProperties: [
],
properties: {
id: { type: 'ID' },
name: {},
pairs: {
type: 'object',
patternProperties: {
"^[A-Za-z]+$": {
type: 'object'
}
},
additionalProperties: false
},
// THIS IS THE CONTAINER FOR EXCHANGES OBJECTS
exchanges: {
type: 'object',
patternProperties: {
"^[A-Za-z]+$": {
type: 'object'
}
},
additionalProperties: false
},
// END
bot: {
type: 'object',
properties: {
debug: { type: 'boolean' },
gui: { type: 'boolean' },
period_storage_ticker: { type: 'number' },
interval_ticker_update: { type: 'number' },
timeout_buy: { type: 'number' },
timeout_sell: { type: 'number' },
WATCH_MODE: { type: 'boolean' },
TELEGRAM_ENABLED: { type: 'boolean' },
TELEGRAM_NICK: {},
TOKEN: {},
chat_id: { type: 'number' }
},
required: [
'debug',
'gui',
'period_storage_ticker',
'interval_ticker_update',
'timeout_buy',
'timeout_sell',
'WATCH_MODE',
'TELEGRAM_ENABLED',
'TELEGRAM_NICK',
'TOKEN',
'chat_id'
]
},
GUI: {
type: 'object',
properties: {
enabled: { type: 'boolean' },
start: { type: 'boolean' },
port: { type: 'number' },
https: { type: 'boolean' },
key: {},
cert: {},
networktraffic: { type: 'boolean' },
authentication: {
type: 'object',
properties: {
login: { type: 'boolean' },
twoFA: { type: 'boolean' }
},
required: [
'login',
'twoFA'
]
},
notifications: {
type: 'object',
properties: {
trade: { type: 'boolean' },
callback: { type: 'boolean' },
error: { type: 'boolean' }
},
required: [
'trade',
'callback',
'error'
]
}
},
required: [
'enabled',
'start',
'port',
'https',
'key',
'cert',
'networktraffic',
'authentication',
'notifications'
]
},
ws: {
type: 'object',
properties: {
port: { type: 'number' },
clientport: { type: 'number' },
hostname: {}
},
required: [
'port',
'clientport',
'hostname'
]
}
createdAt: {},
updatedAt: {}
}
}
Дочерний объектB ->
let schema = {
title: 'Exchanges',
description: 'Exchanges database.',
// MY CURRENT EDIT (NOT WORKING)
type: 'object',
patternProperties: {
"^[A-Za-z]+$": { type: 'boolean' }
},
additionalProperties: false,
// END
required: [
],
uniqueItemProperties: [
],
properties: {
},
}
Если ясделать запрос и попытаться что-либо передать, это работает, и проверка не производится.Те же самые свойства patternProperties, установленные на более глубоком уровне, вообще не имеют проблем и проверены правильно.