Эта статья продолжает статью REserve — Rational и содержит некоторые технические подробности проекта REserve.

Обзор концепции

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

Когда сопоставление определено, его ассоциация с обработчиком осуществляется через определенное свойство (называемое префиксом; например: file).

Значение этого свойства настраивает поведение обработчика при выполнении. Например, обработчик файлов ожидает путь к файлу.

Группы захвата можно определить в соответствующем регулярном выражении, чтобы извлекать части URL и повторно использовать их в свойстве (они обозначаются $1, $2... ) .

Следовательно, следующее сопоставление будет соответствовать URL-адресу /sample/index.html и обслуживать запрос с файлом ../www/sample/index.html.

Обзор реализации

REserve разработан на основе простой архитектуры, представленной в следующей Блок-схеме.

Блок-схема технической архитектуры TAM

Существует 4 основных строительных блока (также известных как агенты), а именно:

  • Читатель конфигурации
  • Сервер
  • Диспетчер
  • Обработчики

Они необходимы для запуска сервера, но последний дополнительный компонент позволяет проводить тестирование: фиктивный.

Конфигурация

Агент конфигурации предоставляет два метода.

С одной стороны, он предлагает метод read, способный читать файлы конфигурации JSON. Чтобы обеспечить повторное использование, он также поддерживает включение других файлов с использованием ключевого слова extends. При такой десериализации каждый путь относится к папке, в которой хранится файл конфигурации.

С другой стороны, либо после чтения конфигурации из файла, либо после ее создания из литерала агент предоставляет метод check для проверки конфигурации.

Особенно :

  • обработчики загружаются и их определения проверяются
  • каждое сопоставление проверяется на основе соответствующего обработчика, который может предоставить схему и метод validate

Служить

Обслуживающий агент несет ответственность за:

  • построение объекта эмиттер событий
  • создание экземпляра http(s) сервера
  • переадресация входящих запросов диспетчеру

При наличии проверенного объекта конфигурации он является основной точкой входа для запуска сервера.

Диспетчер

Агент-диспетчер — это сердце REserve; он направляет полученные запросы к разным обработчикам, используя следующий алгоритм:

  • он сопоставляет входящий request.url с регулярными выражениями сопоставления
  • когда найдено совпадение, он выполняет метод redirect обработчика
  • если исполняемый обработчик выполняет внутреннее перенаправление (метод возвращает обещание, преобразованное в новый URL-адрес или код состояния), он перезапускает сопоставление процесс с первого отображения
  • В противном случае он продолжается по списку сопоставлений до тех пор, пока не будет вызван response.end.

Этот цикл проиллюстрирован на следующей диаграмме действий.

Диаграмма активности TAM алгоритма диспетчера

Обработчики

Каждый обработчик реализует асинхронный redirect метод получения:

Пять обработчиков поставляются из коробки вместе с REserve.

файл

Обработчик файлов отвечает на запросы, обслуживая файлы из локальной файловой системы. Он поддерживает только глагол GET и - если вы не устанавливаете - ограниченный список MIME-типов (проверьте документацию). Он также реализует полезное поведение:

  • входящие параметры URL автоматически удаляются, чтобы упростить выражение соответствия
  • доступ к каталогу внутренне перенаправляется на внутренний index.html файл (если есть)

Пример :

Это сопоставление ответит на URL /sample/index.html?parameter=value#hash содержимым файла ../www/sample/index.html.

URL

Обработчики URL-адресов перенаправляют входящие запросы на удаленный URL-адрес, поддерживаются все глаголы.

Пример :

Это сопоставление ответит на URL-адрес /proxy/https/npmjs.com/package/reserve содержимым URL-адреса https://www.npmjs.com/package/reserve.

обычай

Пользовательский обработчик предлагает упрощенный интерфейс для создания пользовательских обработчиков. Код можно загрузить с помощью (для файла конфигурации JSON) или путем передачи function. Он также обеспечивает мониторинг файлов для перезагрузки реализации в случае изменения.

Пример :

с cors.js :

Это сопоставление добавит заголовок ответа 'Access-Control-Allow-Origin' ко всем входящим запросам, и обработка будет проходить через оставшиеся сопоставления.

статус

Обработчики статуса заканчивают любой запрос с заданным статусом, см. соответствующую документацию.

использовать

Обработчик использования позволяет повторно использовать экспресс-функции промежуточного программного обеспечения.

Эта часть будет подробно описана в следующей статье с некоторыми примерами использования, но ее можно рассматривать как адаптер для приспособления экспресс-функций промежуточного программного обеспечения к REserve.

Пример :

Это сопоставление выполняет промежуточное ПО express-session для создания сеансов.

Насмехаться

Мок-компонент — это замена агента подачи, предназначенная для предоставления контролируемой среды для тестирования конфигурации. Он предлагает метод имитации запроса, отправляя его и ожидая завершения его обработки.

Пример :

с index.hml :