В Universal Router объект context
играет центральную роль при обработке маршрутов. Он создаётся при каждом
вызове метода router.resolve() и передаётся во все
обработчики маршрутов. context содержит всю необходимую
информацию о текущем запросе, что позволяет маршрутам работать динамично
и гибко.
contextpathname Строка, содержащая путь
запроса, который нужно сопоставить с маршрутом. Этот путь передаётся в
router.resolve() и является основой для поиска подходящего
маршрута.
const context = { pathname: '/users/42' };route Ссылка на текущий маршрут,
который был сопоставлен с pathname. Изначально это значение
отсутствует и заполняется после успешного сопоставления маршрута.
console.log(context.route.name); // 'userDetail'baseUrl Используется для вложенных
маршрутов. Отражает часть пути, которая уже была обработана родительским
маршрутом, позволяя корректно формировать относительные URL для дочерних
маршрутов.
const routes = [
{
path: '/users',
children: [
{ path: '/:id', name: 'userDetail' }
]
}
];
// Для '/users/42' baseUrl будет '/users'params Объект, содержащий параметры
маршрута, извлечённые из пути. Ключи соответствуют именам параметров,
указанным в path.
context.params = { id: '42' };query Объект с query-параметрами,
если они передаются в URL. Universal Router не парсит их автоматически,
но можно передавать в context при вызове
resolve().
const context = { pathname: '/search', query: { q: 'javascript' } };
console.log(context.query.q); // 'javascript'parent Ссылка на родительский
context при использовании вложенных маршрутов. Позволяет
обращаться к данным предыдущего уровня маршрутизации.
context.parent.baseUrl; // '/users'next Функция, позволяющая
передавать управление следующему подходящему маршруту, если текущий
обработчик решает не завершать обработку. Это ключевой механизм для
middleware-подобного поведения.
function handler(ctx, next) {
if (!ctx.params.id) return next();
return `User ${ctx.params.id}`;
}title и другие кастомные свойства
Universal Router позволяет добавлять произвольные свойства в
context, чтобы хранить дополнительную информацию о
состоянии приложения или данных маршрута.
context.title = 'Профиль пользователя';context в маршрутахimport UniversalRouter from 'universal-router';
const routes = [
{
path: '/users/:id',
name: 'userDetail',
action: (context) => {
return `Пользователь с ID: ${context.params.id}`;
}
}
];
const router = new UniversalRouter(routes);
router.resolve({ pathname: '/users/42' }).then(result => {
console.log(result); // Пользователь с ID: 42
});
В этом примере context.params.id автоматически получает
значение из URL, а context.route содержит объект маршрута с
name и path.
baseUrlconst routes = [
{
path: '/users',
children: [
{
path: '/:id',
action: (ctx) => `Профиль пользователя ${ctx.params.id}, базовый URL: ${ctx.baseUrl}`
}
]
}
];
const router = new UniversalRouter(routes);
router.resolve({ pathname: '/users/42' }).then(console.log);
// Профиль пользователя 42, базовый URL: /users
Здесь baseUrl используется для корректного формирования
относительных ссылок внутри вложенного маршрута.
nextconst routes = [
{
path: '/admin',
action: (ctx, next) => {
if (!ctx.user || !ctx.user.isAdmin) return 'Доступ запрещён';
return next();
},
children: [
{ path: '/dashboard', action: () => 'Админ панель' }
]
}
];
context.next позволяет маршруту передать управление
дочерним маршрутам только при выполнении определённых условий,
обеспечивая гибкий контроль доступа.
contextcontext создаётся для каждого вызова
resolve() и не хранит состояние между вызовами, если его
явно не сохранять.params, baseUrl и
route автоматически заполняются Universal Router, остальные
можно добавлять для нужд приложения.context.parent и context.next делают
возможной работу с вложенными маршрутизируемыми структурами и
middleware-логикой.user,
title, meta) могут быть помещены в
context и использоваться в любом маршруте.Использование объекта context обеспечивает полную
динамику маршрутизации: параметры, вложенность, middleware и состояние,
создавая единый интерфейс для управления всеми аспектами обработки URL в
приложении на JavaScript.