В библиотеке Page.js объект контекста
ctx играет центральную роль при маршрутизации. Одним из
ключевых свойств этого объекта является ctx.path. Оно
представляет собой полный путь URL, который был использован для вызова
текущего маршрута, включая все сегменты, но без домена и протокола. Это
свойство позволяет получить точное отображение того, как пользователь
перешёл на страницу, что особенно важно при динамических маршрутах и
сложной логике обработки URL.
ctx.pathctx.path всегда возвращает строку, содержащую
путь запроса начиная с символа /.?key=value)
и hash (#anchor). Для этих частей
существуют отдельные свойства: ctx.querystring и
ctx.hash.page.redirect().Пример структуры:
{
path: "/users/123/profile",
params: { id: "123" },
querystring: "tab=posts",
hash: "#section1"
}
В данном примере ctx.path равен
"/users/123/profile".
ctx.path для маршрутовМожно использовать ctx.path для динамического обновления
элементов интерфейса, таких как активные ссылки меню:
page('/home', ctx => {
const menuItem = document.querySelector('.menu-item.home');
if (ctx.path === '/home') {
menuItem.classList.add('active');
}
});
При работе с параметризованными маршрутами ctx.path
помогает получить полный путь без необходимости вручную составлять URL
из ctx.params:
page('/users/:id', ctx => {
console.log(ctx.path); // "/users/42"
console.log(ctx.params.id); // "42"
});
ctx.path сохраняет исходный путь, даже если страница
была перенаправлена:
page('/old-route', ctx => {
page.redirect('/new-route');
});
page('/new-route', ctx => {
console.log(ctx.path); // "/new-route"
});
Это позволяет вести точный учёт переходов и строить логику аналитики на стороне клиента.
ctx.path от других свойств ctx| Свойство | Описание |
|---|---|
ctx.path |
Полный путь запроса без домена и протокола, без query string и hash |
ctx.params |
Объект параметров маршрута (:id,
:slug) |
ctx.querystring |
Строка после ? в URL (например,
key=value&foo=bar) |
ctx.hash |
Строка после # в URL |
ctx.pathname |
Путь запроса без query string и hash (похоже на
ctx.path, но иногда используется при серверном
рендеринге) |
Основное отличие ctx.path в том, что оно точно
соответствует пути, введённому или сгенерированному
пользователем, и может использоваться для любых проверок
маршрутов.
page('*', ctx => {
if (ctx.path.startsWith('/admin')) {
console.log('Пользователь находится в админке');
}
});
page('/dashboard', ctx => {
const dashboardSection = document.querySelector('#dashboard');
dashboardSection.style.display = ctx.path === '/dashboard' ? 'block' : 'none';
});
page('*', ctx => {
console.log(`Пользователь перешёл на путь: ${ctx.path}`);
});
Такой подход позволяет централизованно отслеживать все переходы и строить клиентскую аналитику без необходимости интеграции с сервером.
ctx.path с динамическими маршрутамиДля маршрутов с переменными сегментами (:id,
:slug) ctx.path содержит исходный
URL, что позволяет легко:
Пример использования с регулярным выражением:
page('*', ctx => {
if (/^\/products\/\d+/.test(ctx.path)) {
console.log('Просмотр страницы продукта');
}
});
Здесь ctx.path напрямую позволяет сопоставлять маршруты
с паттернами без необходимости вручную извлекать параметры.
Свойство ctx.path является фундаментальным инструментом
для работы с маршрутами в Page.js, позволяя точно
отслеживать и управлять навигацией, независимо от параметров и
редиректов. Оно обеспечивает прямой доступ к реальному URL-пути и служит
основой для динамических проверок, аналитики и условного рендеринга
контента.