В Universal Router маршруты определяются как объекты JavaScript с набором ключей, которые задают поведение при совпадении URL. Каждый объект маршрута может содержать обязательные и опциональные свойства, позволяющие управлять обработкой, вложенностью и динамическими параметрами.
path Строка, определяющая шаблон
URL. Может содержать параметры, указанные через двоеточие
:param, и поддерживает регулярные выражения. Примеры:
{ path: '/users/:id' }
{ path: '/files/:fileName(.*)' }
Параметры, указанные в пути, автоматически доступны в объекте
context.params.
action Функция, вызываемая при
совпадении маршрута. Принимает один аргумент — context —
объект с информацией о маршруте:
{
path: '/users/:id',
action: (context) => {
return `User ID: ${context.params.id}`;
}
}
Возвращаемое значение функции может быть любым: строкой, объектом,
промисом. Если action возвращает промис, Universal Router
автоматически обрабатывает асинхронные операции.
children Массив вложенных
маршрутов, позволяющий создавать иерархическую структуру URL. Если
родительский маршрут совпадает, поиск продолжается в массиве
children. Пример:
{
path: '/dashboard',
action: () => 'Dashboard',
children: [
{ path: '/settings', action: () => 'Settings' },
{ path: '/profile', action: () => 'Profile' }
]
}
Вложенные маршруты наследуют контекст родителя, включая параметры и состояние.
name Уникальное имя маршрута,
полезное для ссылок или генерации URL:
{ path: '/login', name: 'login', action: () => 'Login Page' }
Позволяет ссылаться на маршрут независимо от текущего пути:
router.resolve({ name: 'login' });redirect Строка или функция,
указывающая адрес для перенаправления. Может быть статической или
динамической:
{ path: '/', redirect: '/home' }
{ path: '/old', redirect: (context) => `/new?from=${context.path}` }parent Используется редко, но
позволяет явно указать родительский маршрут. Обычно управление иерархией
осуществляется через children.
caseSensitive Булево значение,
определяющее чувствительность маршрута к регистру символов. По умолчанию
false.
resolveRoute Функция, позволяющая
полностью переопределить логику сопоставления маршрута. Принимает объект
маршрута и контекст. Используется для сложных случаев, когда стандартные
методы не подходят.
:param.?, например /posts/:id?.* или + в регулярном выражении, например
/tags/:tag+.Примеры использования:
{ path: '/posts/:id?', action: ctx => ctx.params.id || 'All Posts' }
{ path: '/files/:path(.*)', action: ctx => ctx.params.path }
Параметры автоматически попадают в context.params, что
упрощает работу с динамическими маршрутами.
action может возвращать промисы, что позволяет загружать
данные до отображения компонента:
{
path: '/users/:id',
action: async (context) => {
const user = await fetchUser(context.params.id);
return user;
}
}
Вложенные маршруты также поддерживают асинхронность: если родитель возвращает промис, дочерние маршруты ждут его выполнения перед продолжением обработки.
Вложенные маршруты получают:
context.params.action
доступен, если использовать цепочку промисов.action и path.Пример:
{
path: '/dashboard',
action: () => 'Dashboard',
children: [
{
path: '/stats',
action: (ctx) => `Stats in ${ctx.params.section || 'main'}`
}
]
}
В этом примере дочерний маршрут /dashboard/stats может
использовать параметры и состояние родителя.
Universal Router позволяет создавать массив объектов маршрутов, формируя единый роутер:
const routes = [
{ path: '/', action: () => 'Home' },
{ path: '/about', action: () => 'About' },
{
path: '/users',
children: [
{ path: '/:id', action: ctx => `User ${ctx.params.id}` }
]
}
];
const router = new UniversalRouter(routes);
Такой подход упрощает организацию больших приложений с множеством страниц и вложенных маршрутов.
path — основной идентификатор маршрута, поддерживает
параметры и регулярные выражения.action — функция обработки, может быть синхронной или
асинхронной.children — вложенные маршруты, наследуют контекст
родителя.params автоматически создаются из динамических
сегментов URL.redirect и name позволяют управлять
навигацией и ссылками без привязки к URL.action и вложенные маршруты обеспечивают
гибкую загрузку данных и компонентов.Структура объекта маршрута в Universal Router — это комбинация гибкости и простоты, позволяющая строить как простые, так и сложные маршрутизации с минимальными усилиями.