Я использую AJV для проверки моей JSON схемы. В настоящее время схема 'обязательна' из модуля и скомпилирована через экземпляр AJV. Я добавляю специальный валидатор (пользовательское ключевое слово на языке AJV) для проверки номера мобильного телефона в Великобритании. Мои файлы выглядят так:
main-service. js
const Ajv = require('ajv');
const AjvErrors = require('ajv-errors');
const templates = require('./templates');
const ajv = new Ajv({
allErrors: true,
jsonPointers: true,
format: 'full',
coerceTypes: true
});
AjvErrors(ajv);
ajv.addFormat('x-mobilePhoneNumber', mobilePhoneNumber => {
return isValidMobilePhoneNumber(mobilePhoneNumber);
});
function someFunc(){
const answers = {key: "answer"};
const schema = templates['some-name'](id)
const validate = ajv.compile(schema);
const valid = validate(answers);
*** Do some stuff with this ***
};
function isValidMobilePhoneNumber(number) {
*** code to validate a phone number ***
};
шаблонов. js
const template = require('q-templates-application'); // this returns the JSON-Schema object.
module.exports = {
'some-name': id => {
template.id = id;
return template;
}
Как только "шаблон" требуется, он содержит объект JSON -Schema, который будет использовать ключевое слово mobilePhoneNumber
. Эта реализация работает и проверяет, как ожидается. Однако проблема, с которой я столкнулся, заключается в том, что в моем основном сервисе жестко задан пользовательский валидатор.
По сути, я хочу специальный код валидации (для номера мобильного телефона в данном случае, но также и для любых других валидаторов). Я выбираю добавить в будущем), который будет возвращен вместе с шаблоном, что позволит мне сохранять любые пользовательские проверки, прикрепленные к шаблону, и не придется жестко кодировать каждую из них.
Я не совсем уверен как это сделать, или даже если это возможно. Я пытался реализовать что-то вроде следующего:
main-service
инициирует AJV template
требуется из шаблонов. js file const template = require('q-templates-application')
импортирует функцию вместо json -схемы объекта - функция проверяет, присутствуют ли дополнительные ключевые слова в схеме, или пользовательские ключевые слова перечислены отдельно
- Если они есть, функция выполняет команду
ajv.addFormat
- функция возвращает объект JSON -схемы
Я изо всех сил пытаюсь найти достойный способ сформулировать вышеизложенное, чтобы любые потенциальные решения, полные или частичные, были бы оценены!