В библиотеке Page.js символ *
используется для обозначения произвольного подмаршрута,
то есть маршрута, который может содержать любое количество сегментов
URL. Это особенно полезно для создания обработчиков динамических
маршрутов, когда заранее неизвестна точная структура пути.
page('*', function(ctx) {
console.log('Произвольный путь:', ctx.path);
});
В данном примере любой URL, который не совпадает с другими явно
заданными маршрутами, будет обработан функцией-колбэком. Контекст
ctx содержит всю информацию о текущем пути:
ctx.path — полный путь URL (например,
/products/123/details)ctx.params — объект с параметрами маршрута, если они
были указаныctx.querystring — строка запроса после
?ctx.hash — фрагмент после # в URLСимвол * чаще всего применяется в конце
маршрута, чтобы «поймать» все оставшиеся сегменты:
page('/files/*', function(ctx) {
console.log('Путь к файлу:', ctx.params[0]);
});
Здесь любой URL, начинающийся с /files/, будет
соответствовать маршруту, а ctx.params[0] вернет
все оставшиеся сегменты пути после
/files/. Например:
/files/images/photo.jpg →
ctx.params[0] === "images/photo.jpg"/files/docs/report.pdf →
ctx.params[0] === "docs/report.pdf"Если использовать несколько звездочек в одном маршруте, Page.js будет учитывать только первую, остальные могут быть интерпретированы как часть строки:
page('/archive/*/edit', function(ctx) {
console.log('Редактируемый архив:', ctx.params[0]);
});
Для URL /archive/2026/march/edit результат будет:
ctx.params[0] === "2026/march"
Символ * удобен, когда структура URL глубоко вложена и
заранее неизвестна. Например, блог с произвольной глубиной
категорий:
page('/blog/*', function(ctx) {
const fullPath = ctx.params[0]; // полный путь категории и статьи
const segments = fullPath.split('/');
console.log('Сегменты пути:', segments);
});
При URL /blog/technology/javascript/page массив
segments будет:
["technology", "javascript", "page"]
Это позволяет динамически определять, какая статья или категория запрошена, без необходимости создавать отдельные маршруты для каждого уровня вложенности.
Символ * может использоваться вместе с именованными
параметрами. Например:
page('/user/:id/*', function(ctx) {
console.log('ID пользователя:', ctx.params.id);
console.log('Остальная часть пути:', ctx.params[0]);
});
Для URL /user/42/settings/profile:
ctx.params.id === "42"
ctx.params[0] === "settings/profile"
Это удобно, когда необходимо разделять фиксированные части маршрута (например, идентификатор пользователя) и произвольные подмаршруты.
Важно учитывать, что Page.js проверяет маршруты в порядке их
определения. Маршрут с * обычно размещают в конце
списка, чтобы не перекрывать более конкретные маршруты:
page('/about', aboutPage);
page('/contact', contactPage);
page('*', notFoundPage); // ловит все остальные URL
Если разместить '*' выше конкретных маршрутов, все
остальные маршруты станут недоступны, так как Page.js будет считать их
совпадением с универсальным обработчиком.
* для обработки 404 страниц или любых
непредусмотренных маршрутов..split('/').* в конце
списка, чтобы не блокировать другие обработчики.Символ * в Page.js делает маршрутизацию гибкой, позволяя
создавать динамические и непредсказуемые пути без необходимости писать
отдельные обработчики для каждого варианта URL.