JS: Веб-разработка
Теория: Именованные маршруты
Шаблоны сайта содержат множество внутренних ссылок, начиная от меню, заканчивая кнопками и формами. До сих пор мы формировали эти ссылки прямо в тех местах, где они нам нужны:
Так же ссылки строятся и в обработчиках, например, при редиректах:
В примерах выше, формирование ссылки зашито прямо в то место, где она используется. Такой способ формирования ссылок потенциально опасен. Что если маршрут изменится с /courses/:id на /c/:id? Придётся пройтись по всем шаблонам и изменить все ссылки /courses/:id на /c/:id. А если этот маршрут удалить? Сайт продолжит работать, но ссылки начнут вести на несуществующие страницы. Лучше если страницы с такими ссылками начнут выдавать ошибки. Тогда выявить подобные ссылки станет крайне просто.
Именованные маршруты с помощью маппинга
Для решения этой задачи придумали именованные маршруты. Каждому маршруту фреймворка присваивается имя, которое затем можно использовать при построении конкретной ссылки. В Fastify такой механизм не встроен, но его легко можно имитировать объектом с описанием маршрутов.
После того как методы добавлены, их можно внедрить в описание маршрутов Fastify и передавать в шаблоны:
Пример шаблона для вывода списка курсов:
Немного падает читаемость, но ее можно повысить добавив комментарии над определениями маршрутов.
Именованные маршруты с помощью библиотек
Есть еще один популярный подход в работе с маршрутами. Он реализуется с помощью специальных библиотек и позволяет создавать имена для маршрутов. Разберем на примере библиотеки fastify-reverse-routes:
Подключение библиотеки к приложению осуществляется стандартным способом:
Когда библиотека подключена, мы можем получать маршрут по его имени, а имя маршрута задается через опции. Разберем подробнее на примере маршрута:
Мы создали обработчик и задали ему имя 'users'. Теперь везде, где нам нужно получить адрес этого маршрута, мы можем это сделать по заданному имени:
Этот способ позволяет обращаться и к динамическим маршрутам:
Для удобства, мы можем определить вспомогательную функцию для шаблонов, чтобы в них получать маршруты. Это делается с помощью свойства defaultContext:
Вызов в шаблоне:
Рекомендуемые программы
Завершено
0 / 23


