Universal Router — это гибкая библиотека маршрутизации для JavaScript, которая позволяет управлять переходами между страницами или состояниями приложения, используя динамические и статические пути. Ключевой элемент работы с Universal Router — это настройка парсинга путей, которая определяет, как маршруты интерпретируют URL и извлекают из него параметры.
В Universal Router маршруты задаются в виде массива объектов, где
каждый объект содержит как минимум ключ path и
action. Путь (path) может быть:
{ path: '/home', action: () => 'Home Page' }
{ path: '/user/:id', action: ({ params }) => `User ID: ${params.id}` }
{ path: '/blog/:slug?', action: ({ params }) => params.slug || 'Blog Index' }
{ path: '/order/:orderId(\\d+)', action: ({ params }) => `Order #${params.orderId}` }
Universal Router автоматически разбирает динамические сегменты URL и
передаёт их в объект params, доступный внутри функции
action. Настройка парсинга путей позволяет:
?.{ path: '/category/:main/:sub?', action: ({ params }) => params }
В этом примере params.main будет обязательным, а
params.sub — опциональным.
Universal Router поддерживает кастомные функции
парсинга, которые можно подключить через
resolveRoute или отдельные middleware. Пример:
const routes = [
{
path: '/product/:id',
action: ({ params }) => {
params.id = parseInt(params.id, 10);
return `Product ID: ${params.id}`;
}
}
];
Здесь параметр id, который изначально приходит как
строка, преобразуется в число. Такой подход позволяет интегрировать
строгую типизацию и дополнительную валидацию параметров на уровне
маршрута.
В Universal Router маршруты могут быть вложенными,
что упрощает структурирование сложных приложений. Каждый маршрут может
содержать ключ children, в котором определяются
подмаршруты:
const routes = [
{
path: '/dashboard',
action: () => 'Dashboard',
children: [
{ path: '/stats', action: () => 'Statistics' },
{ path: '/settings', action: () => 'Settings' }
]
}
];
Парсинг путей работает рекурсивно: сначала сопоставляется родительский маршрут, затем проверяются дочерние, что позволяет строить иерархические URL с динамическими параметрами на разных уровнях.
При совпадении нескольких маршрутов с одним URL Universal Router использует порядок следования в массиве для определения приоритета. Для более точного контроля:
children для группировки и локального
приоритета маршрутов.Для приложений с большим количеством динамических маршрутов важна оптимизация обработки путей:
children, чтобы сократить количество проверок на верхнем
уровне.{
path: '/event/:year(\\d{4})/:month(\\d{2})?',
action: ({ params }) => `Event: ${params.year}-${params.month || 'all'}`
}
{
path: '/shop/:category/:subcategory?',
children: [
{ path: '/item/:id', action: ({ params }) => params }
]
}
function parseIdMiddleware(route, context, next) {
if (route.params?.id) {
route.params.id = Number(route.params.id);
}
return next();
}
Настройка парсинга путей в Universal Router предоставляет гибкость и точный контроль над маршрутами, позволяя создавать как простые, так и сложные структуры URL с динамическими, необязательными и строго типизированными сегментами. Комбинация статических и динамических маршрутов, вложенных структур и кастомного парсинга делает Universal Router мощным инструментом для любых JavaScript-приложений.