В библиотеке Page.js объект ctx
представляет собой контекст текущего маршрута. Он содержит всю
информацию о текущем состоянии маршрутизации: путь, параметры, хэш,
состояние запроса и другие детали. Одним из ключевых свойств этого
объекта является ctx.pathname.
ctx.pathname хранит строку с путём запроса без
хоста, протокола и параметров строки запроса, то есть только
путь в URL. Это свойство играет критическую роль при реализации
навигации и логики маршрутов, так как позволяет точно определить, какой
путь был вызван пользователем или через вызов
page.show().
ctx.pathnameЧистый путь URL Пример: если URL браузера —
https://example.com/products/42?ref=home
то ctx.pathname будет:
"/products/42"
Здесь не включены параметры запроса
(?ref=home) и хэш-фрагмент
(#section).
Сравнение маршрутов Свойство
ctx.pathname удобно использовать для сравнения текущего
пути с заданными маршрутами:
page('/products/:id', (ctx) => {
if (ctx.pathname === '/products/42') {
console.log('Пользователь на странице товара 42');
}
});Динамические сегменты URL При использовании
динамических маршрутов, таких как /products/:id,
ctx.pathname возвращает фактический путь, который ввёл
пользователь, без подстановки параметров:
page('/products/:id', (ctx) => {
console.log(ctx.pathname); // '/products/42'
console.log(ctx.params.id); // '42'
});
Таким образом, ctx.pathname и ctx.params
дополняют друг друга: первый показывает путь полностью, второй —
конкретные значения динамических сегментов.
ctx.pathname часто применяется для:
Активных ссылок меню
page('*', (ctx) => {
document.querySelectorAll('nav a').forEach(link => {
link.classList.toggle('active', link.getAttribute('href') === ctx.pathname);
});
});
Такой подход позволяет подсвечивать текущий пункт меню без анализа параметров запроса или хэша.
Логики редиректов
page('*', (ctx, next) => {
if (ctx.pathname === '/') {
page.redirect('/home');
} else {
next();
}
});
Здесь проверка ctx.pathname гарантирует, что редирект
сработает только при точном совпадении пути.
Аналитики и трекинга Встраивание аналитики часто требует записи точного пути страницы:
page('*', (ctx) => {
analytics.trackPage(ctx.pathname);
});
Это более корректно, чем использовать
window.location.pathname, так как Page.js может управлять
виртуальными маршрутами без полной перезагрузки страницы.
ctxctx.path — включает путь и параметры
запроса.ctx.querystring — содержит только
параметры после ?.ctx.params — объект динамических
сегментов маршрута.Пример различий:
page('/products/:id', (ctx) => {
console.log(ctx.pathname); // '/products/42'
console.log(ctx.path); // '/products/42?ref=home'
console.log(ctx.querystring); // 'ref=home'
console.log(ctx.params.id); // '42'
});
Такое разделение позволяет гибко обрабатывать URL: проверять маршрут, извлекать параметры и формировать ссылки для редиректов.
Для вложенных или wildcard-маршрутов (*) свойство
ctx.pathname всегда возвращает абсолютный путь
относительно корня:
page('/products/*', (ctx) => {
console.log(ctx.pathname); // '/products/42/details'
});
Это гарантирует корректное сопоставление маршрутов, даже если часть пути передаётся через wildcard.
ctx.pathnamectx.path и ctx.querystring,
предоставляя чистый путь без дополнительной информации.ctx.params и другими свойствами
обеспечивает полную гибкость при реализации динамических маршрутов и
редиректов.ctx.pathname — основной инструмент для контроля текущего
пути, обеспечения правильной логики маршрутизации и управления
пользовательским интерфейсом в Page.js.