В Page.js объект контекста (context object) является ключевым элементом маршрутизации. Он содержит всю информацию о текущем маршруте, включая путь, параметры, состояние и методы управления навигацией. Понимание структуры этого объекта позволяет создавать гибкие и динамичные приложения на стороне клиента.
path Представляет полный путь
текущего маршрута, включая параметры запроса. Используется для анализа
текущего URL.
page('/user/:id', ctx => {
console.log(ctx.path); // "/user/123"
});params Объект, содержащий все
параметры маршрута, определённые через :param в шаблоне
URL. Параметры доступны по имени.
page('/user/:id', ctx => {
console.log(ctx.params.id); // "123"
});querystring Строка запроса,
содержащая всё после знака ? в URL. Например, при
?page=2&sort=asc значение будет
"page=2&sort=asc".
page('/search', ctx => {
console.log(ctx.querystring); // "page=2&sort=asc"
});title Свойство, позволяющее
динамически изменять заголовок страницы.
page('/about', ctx => {
ctx.title = "О нас";
document.title = ctx.title;
});state Содержит пользовательские
данные, переданные при навигации через page.show(). Может
использоваться для хранения информации о состоянии интерфейса.
page.show('/dashboard', { user: 'admin' });
page('/dashboard', ctx => {
console.log(ctx.state.user); // "admin"
});redirect(path) Позволяет программно
перенаправлять на другой маршрут, сохраняя структуру маршрутизации.
page('/old-page', ctx => {
ctx.redirect('/new-page');
});save() и pushState()
Эти методы используются внутренне для управления историей браузера, но
могут быть полезны для сохранения состояния.
handled Логическое свойство,
указывающее, был ли маршрут уже обработан. Полезно при использовании
промежуточных обработчиков (middleware).
Объект контекста передаётся через цепочку middleware, что позволяет последовательно изменять его свойства. Каждый обработчик может дополнять объект контекста, добавляя новые данные.
page('/user/:id', fetchUser, renderUser);
function fetchUser(ctx, next) {
ctx.user = { id: ctx.params.id, name: 'John Doe' };
next(); // передача управления следующему обработчику
}
function renderUser(ctx) {
document.body.textContent = `Пользователь: ${ctx.user.name}`;
}
Ключевые моменты:
ctx передаётся по ссылке, изменения доступны всем
последующим middleware.next() используется для передачи управления следующему
обработчику, без него цепочка прерывается.Page.js не накладывает ограничений на структуру контекста, поэтому можно добавлять собственные поля для хранения состояния, сервисов или настроек. Это особенно полезно при сложных SPA с авторизацией и управлением состоянием.
page('*', ctx => {
ctx.isAuthenticated = Boolean(localStorage.getItem('token'));
});
Свойства контекста позволяют реализовать условные маршруты, перенаправления и обработку ошибок без дублирования кода.
page('/admin', ctx => {
if (!ctx.isAuthenticated) {
ctx.redirect('/login');
} else {
document.body.textContent = "Добро пожаловать, администратор!";
}
});
ctx.redirect гарантирует корректное
обновление истории.Объект контекста помогает формировать ссылки на основе текущего состояния приложения:
page('/profile/:id', ctx => {
const editLink = `/profile/${ctx.params.id}/edit`;
document.querySelector('#editButton').href = editLink;
});
ctx.params используется для вставки динамических
значений в URL.Сводка ключевых свойств и методов:
| Свойство / Метод | Тип | Назначение |
|---|---|---|
path |
string | Полный путь маршрута |
params |
object | Параметры маршрута |
querystring |
string | Строка запроса |
title |
string | Заголовок страницы |
state |
object | Пользовательские данные |
redirect(path) |
function | Программное перенаправление |
next() |
function | Передача управления следующему middleware |
handled |
boolean | Флаг обработки маршрута |
Объект контекста является центром управления маршрутизацией, связывая URL, состояние и логику обработки в единую структуру, что делает Page.js мощным инструментом для построения клиентских приложений.