Метод generate

Метод generate является мощным инструментом библиотеки Universal Router для динамического построения URL на основе заданных маршрутов. Его основная задача — преобразовать объект с параметрами в строку маршрута, соответствующую маршруту, зарегистрированному в конфигурации роутера. Этот метод особенно полезен при создании ссылок в приложении без необходимости ручного конструирования URL.


Синтаксис и базовое использование

router.generate(name, params, options);

Параметры:

  • name — имя маршрута (string). Используется для идентификации маршрута, как это задано в конфигурации.
  • params — объект (object) с параметрами маршрута. Ключи должны совпадать с именами параметров в пути.
  • options — объект (object) с дополнительными опциями (необязательный).

Возвращаемое значение: Строка — сгенерированный URL на основе имени маршрута и переданных параметров.


Пример базового маршрута

import UniversalRouter from 'universal-router';

const routes = [
  { path: '/', name: 'home' },
  { path: '/user/:id', name: 'userProfile' },
  { path: '/search/:query', name: 'search' }
];

const router = new UniversalRouter(routes);

const url = router.generate('userProfile', { id: 42 });
console.log(url); // /user/42

В данном примере метод generate подставляет значение id в соответствующий параметр маршрута.

Ключевой момент: если параметр, указанный в params, не существует в маршруте, он будет проигнорирован.


Поддержка необязательных параметров

Маршруты могут содержать необязательные параметры, которые задаются через ? в конфигурации пути:

const routes = [
  { path: '/post/:id/:commentId?', name: 'post' }
];

const router = new UniversalRouter(routes);

router.generate('post', { id: 10 });
// /post/10

router.generate('post', { id: 10, commentId: 5 });
// /post/10/5

Если необязательный параметр отсутствует в объекте params, метод generate корректно формирует URL без него.


Использование query-параметров

Для генерации URL с query-параметрами generate поддерживает объект options.query:

const routes = [
  { path: '/search/:query', name: 'search' }
];

const router = new UniversalRouter(routes);

const url = router.generate('search', { query: 'javascript' }, {
  query: { page: 2, sort: 'asc' }
});
console.log(url); // /search/javascript?page=2&sort=asc

Особенности:

  • Query-параметры автоматически кодируются (encodeURIComponent).
  • Можно комбинировать обязательные, необязательные и query-параметры.

Работа с вложенными маршрутами

Universal Router позволяет использовать вложенные маршруты, что важно для крупных приложений. Метод generate корректно формирует URL с учётом вложенной структуры:

const routes = [
  {
    path: '/user/:id',
    name: 'user',
    children: [
      { path: 'profile', name: 'profile' },
      { path: 'settings', name: 'settings' }
    ]
  }
];

const router = new UniversalRouter(routes);

router.generate('profile', { id: 7 });
// /user/7/profile

router.generate('settings', { id: 7 });
// /user/7/settings

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


Настройка опций метода generate

Параметр options позволяет гибко управлять генерацией URL:

  • query — объект с query-параметрами.
  • strict — boolean, включает строгую проверку соответствия переданных параметров маршруту. Если включено, отсутствие обязательного параметра вызовет ошибку.
  • base — базовый путь, который будет добавлен перед сгенерированным URL.
const url = router.generate('userProfile', { id: 5 }, { base: '/app', query: { ref: 'newsletter' } });
// /app/user/5?ref=newsletter

Ошибки и обработка исключений

Метод generate может выбросить ошибки в следующих случаях:

  1. Указано имя маршрута, которого нет в конфигурации.
  2. Отсутствует обязательный параметр маршрута (при включённой опции strict).
  3. Конфликт вложенных маршрутов с одинаковыми именами.

Обработка ошибок выполняется стандартными конструкциями try...catch:

try {
  router.generate('nonExisting', {});
} catch (err) {
  console.error(err.message); // Route "nonExisting" not found
}

Резюме функционала

Метод generate позволяет:

  • Динамически строить URL на основе именованных маршрутов.
  • Подставлять обязательные и необязательные параметры.
  • Добавлять query-параметры и базовый путь.
  • Поддерживать вложенные маршруты и сложные структуры приложения.
  • Контролировать строгую проверку параметров через опции.

Использование generate делает код более поддерживаемым, исключает ручное составление URL и интегрируется с системой маршрутов Universal Router для максимальной гибкости при навигации.