В Page.js каждый маршрут при срабатывании получает
объект контекста ctx, который содержит всю необходимую
информацию о текущем переходе. Контекст — это ключ к доступу к
параметрам URL, состоянию маршрута, информации о query-параметрах и
пользовательских данных, переданных между хэндлерами.
Параметры маршрута определяются через синтаксис с двоеточием в пути:
page('/user/:id', ctx => {
console.log(ctx.params.id); // Выведет значение параметра id
});
Ключевые моменты:
ctx.params — объект, содержащий все динамические
сегменты маршрута.:)
в шаблоне маршрута.page('/user/:userId/post/:postId', ctx => {
console.log(ctx.params.userId);
console.log(ctx.params.postId);
});
Page.js не парсит query-параметры автоматически, но они доступны
через свойство ctx.querystring. Для удобства можно
использовать стандартный URLSearchParams:
page('/search', ctx => {
const params = new URLSearchParams(ctx.querystring);
const query = params.get('q');
const pageNumber = params.get('page');
console.log(query, pageNumber);
});
Особенности:
ctx.querystring содержит строку после
?.URLSearchParams позволяет безопасно
работать с несколькими значениями одного ключа.const paramsObj = Object.fromEntries(new URLSearchParams(ctx.querystring));
Контекст также служит переносчиком данных между промежуточными и основными обработчиками:
page('/dashboard', authMiddleware, dashboardHandler);
function authMiddleware(ctx, next) {
ctx.user = { id: 1, name: 'Alice' };
next();
}
function dashboardHandler(ctx) {
console.log(ctx.user.name); // Alice
}
Особенности:
ctx, доступны всем
последующим хэндлерам для этого маршрута.В контексте маршрута можно хранить состояние, которое будет полезно для динамических интерфейсов или навигации:
page('/cart', ctx => {
ctx.items = [{ id: 1, name: 'Book' }, { id: 2, name: 'Pen' }];
renderCart(ctx.items);
});
Ключевые моменты:
ctx не очищается автоматически между переходами,
поэтому не стоит хранить там долговременные данные.Иногда требуется программно перейти на маршрут с параметрами и query:
page.redirect(`/user/${userId}?tab=profile`);
После перехода в ctx будут доступны:
ctx.params.id // userId
ctx.querystring // 'tab=profile'
Использование комбинации динамических сегментов и query-параметров позволяет гибко строить маршруты без лишней логики на клиенте.
Пример:
page('/profile/:id', ctx => {
ctx.title = `Профиль пользователя ${ctx.params.id}`;
ctx.state.isAdmin = true;
renderProfile(ctx.params.id, ctx.state.isAdmin);
});
ctx.params для динамических
сегментов, а не парсить URL вручную.URLSearchParams для удобного доступа.ctx напрямую, избегая глобальных
переменных.Контекст в Page.js является универсальным инструментом для доступа к параметрам маршрута, query-параметрам и состоянию, позволяя строить гибкие и чистые маршрутизации в одностраничных приложениях.