Как писать мощные схемы в JavaScript

1656655213 kak pisat moshhnye shemy v javascript

автор Диего Хаз

Представляем schm, функциональную библиотеку для создания схем JavaScript и Node.js.

1*u_gVBtCyIcrWbOBv3xDCWg
Фоновое фото Вилли Гейдельбаха

Я работаю с HTML, CSS и JavaScript с 2002 года. Впервые мне понадобилась какая-то схема в JavaScript всего несколько лет назад.

После использования многих разных библиотек и даже создания одной и другой, я решил создать schm. Это результат всего моего опыта работы со схемами JavaScript.

Что такое schm?

schm – это группа пакетов npm, которые помогают разработчикам работать со схемами в JavaScript и Node.js.

Он очень вдохновлен Mongoose Schemas. На самом деле они так похожи, что их можно использовать schm параметров в схемах Mongoose и наоборот Однако это не является специфическим для MongoDB. Вы можете использовать его для всего JavaScript.

Какие проблемы решает schm?

? Разбор и проверка значений формы

На клиенте можно использовать схемы для определения моделей для форм HTML. Это упрощает трансформацию и проверку ценностей. Кроме того, если вы используете Node.js на сервере, вы можете использовать ту же схему. Результатом является согласованное поведение проверок клиента и сервера.

? Разбор и проверка строки запроса

Рассмотрим следующую строку запроса: /?term=John&page=2&limit=10 . Комбинируя такие пакеты как schm-koa, schm-express и/или schm-mongo, вы сможете легко анализировать и проверять строки запроса с поисковыми терминами и разбивкой на страницы.

☊ Связь между клиентом и сервером

Например, если у вас есть приложение, которое потребляет ресурсы из REST API, вы можете использовать схемы, чтобы определить на клиенте структуру объектов, которую ваш клиент ожидает получить от сервера. Если что-то изменится на сервере (например, свойства переименованы), вы можете просто обновить свою схему, чтобы вся программа продолжала работать.

Создание схемы

Простая схема – это просто карта ключей и типов:

Это то же, что использовать a type свойство:

Схема также может быть картой между ключами и значениями по умолчанию. Типы будут определены автоматически:

Это эквивалентно выполнению следующего:

Чтобы узнать больше о том, как писать схемы, посмотрите Схемы Mongoose.

Разбор значений

После определения схемы можно использовать ее для анализа значений. Этот процесс превратит значение в соответствующие типы, а также применит другие анализаторы, определенные в схеме. Вот доступные анализаторы: type, default , set , get , trim, uppercase , lowercase .

Результат будет примерно таким:

{  name: "HAZ",  birthdate: Tue Apr 10 1990 00:00:00 GMT,}

Проверка значений

Так же как и в схемах Mongoose, вы можете определить правила проверки в своих схемах. Вот доступные валидаторы: validate , required , match , enum , max , min , maxlength , minlength .

Вы также можете создавать собственные парсеры и валидаторы, расширяя схему. Об этом мы поговорим далее в данной статье.

Ошибка проверки по умолчанию будет являться массивом объектов, описывающих ошибки.

[  {    message: "age must be greater than or equal 18",    min: 18,    param: "age",    validator: "min",    value: 17,  }]

Если проверка пройдена, он вернет проанализированные значения, как parse().

Составление нескольких схем

Скажем, у вас есть отдельные схемы, описывающие a body, identity и другие вещи, и вы хотите сложить их, чтобы создать a human схема. Это так просто, как это звучит:

Еще один способ составления схем – это вложение. Схему можно использовать как type в другой схеме:

Схемы расширения

Это та часть, где schm действительно сияет. Вы можете добавить специальные анализаторы и валидаторы или даже заменить типичное поведение. parse и validate методы путём создания групп схем.

А группа схем это функция, получающая предварительную схему как единственный аргумент. Кроме предыдущего params , parsers и validators объект схемы имеет a merge метод, который полезен функциям группы схем для объединения новых функций в предыдущие схемы.

Выход приведенного выше фрагмента будет примерно следующим:

{  name: "Haz!!!",  age: 27,}

Если вы хотите пойти дальше и узнать больше о том, как создавать собственные парсеры, посмотрите, как парсеры написаны в основной библиотеке здесь.

Расширяя схемы, мы можем создавать многое. Вот так большинство schm написаны спутниковые библиотеки, такие как schm-translate, schm-computed и schm-mongo.

Об одной из них мы сейчас и поговорим.

Переименование ключей значений

schm-translate – одна из самых простых, но мощных спутниковых библиотек schm . Это несколько более 10 строк кода, сжатых в одну функцию, которая позволяет вам переводить ключи значений в ключи вашей схемы.

Скажем, вы работаете над веб-приложением, потребляющим ресурсы REST API. Вдруг разработчики меняют вещи в API, поэтому тело ответа возвращает несколько иную модель, чем та, которую ожидал клиент. Вместо an email теперь возвращает массив emails .

Возможно, это приведет к сбою вашего приложения. Если у вас нет схемы или какого-либо другого централизованного способа обработки этого объекта, вам нужно будет обновить каждую часть программы, чтобы она соответствовала изменениям сервера.

С schm и schm-translate ее можно решить, изменив несколько строк кода только в одном месте:

Результат будет именно таким, какой ожидал ваше приложение к изменению:

{  name: "Haz",  email: "hazdiego@gmail.com",}

Нажмите здесь, чтобы просмотреть список всех пакетов.

Чем это отличается от других библиотек схем?

Часто задаваемый вопрос: разница между schm и другие библиотеки, такие как Joi и ajv (соответствующая спецификации схемы JSON).

Сравнивая с ajv, schm не соответствует никакой конкретной спецификации. Он пытается имитировать Mongoose Schema API. Кроме того, хотя ajv имеет некоторые функции анализа, они ограничены значениями по умолчанию и приведению типа.

в schmспособность анализировать значения на основе схемы — это то, что позволяет преобразовать строку запроса, например, по запросу MongoDB.

Таким образом, оба Joi и ajv можно комбинировать с schm . Вы можете легко расширить его, чтобы использовать другой метод проверки:

Спасибо, что прочли это!

Если вам это нравится и полезно, вот несколько вещей, которые вы можете сделать, чтобы выразить свою поддержку:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *