Эта статья продолжает статью 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
: