Page.js — это компактная библиотека для маршрутизации на стороне клиента в приложениях на JavaScript. Она позволяет управлять переходами между “страницами” без перезагрузки браузера, используя концепцию single-page application (SPA).
Для использования библиотеки достаточно подключить её через npm или CDN:
// Через npm
npm install page
// Через CDN
<script src="https://unpkg.com/page/page.js"></script>
После подключения библиотеку можно использовать через объект
page.
Page.js использует маршруты для определения, какой код выполнять при изменении URL. Маршрут задаётся строкой пути и функцией-обработчиком:
page('/home', function(ctx) {
console.log('Мы на домашней странице');
});
Ключевые моменты:
'/home' — путь, по которому сработает обработчик.ctx (context) — объект с информацией о маршруте
(например, путь, параметры, query-параметры).После определения маршрутов необходимо запустить Page.js:
page();
Это активирует отслеживание изменений URL и позволяет библиотеке реагировать на переходы.
Page.js поддерживает динамические сегменты пути, позволяя захватывать части URL как параметры:
page('/user/:id', function(ctx) {
console.log('ID пользователя:', ctx.params.id);
});
Особенности:
:id — параметр маршрута. Имя после двоеточия
используется в ctx.params./post/:postId/comment/:commentId.Пример с несколькими параметрами:
page('/post/:postId/comment/:commentId', function(ctx) {
console.log(`Пост: ${ctx.params.postId}, Комментарий: ${ctx.params.commentId}`);
});
Page.js позволяет работать с query-параметрами URL. Они доступны
через ctx.querystring:
page('/search', function(ctx) {
const params = new URLSearchParams(ctx.querystring);
const term = params.get('q');
console.log('Поиск по запросу:', term);
});
ctx.querystring возвращает строку после ? в
URL, что позволяет гибко работать с параметрами запроса.
Page.js позволяет программно изменять URL без полной перезагрузки
страницы, используя метод page.show():
page.show('/home');
page.show('/user/123');
Особенности:
Для обычных ссылок можно использовать обычный <a>
с атрибутом href, а Page.js перехватит клик:
<a href="/about">О нас</a>
Чтобы перехватывать клики по ссылкам, Page.js автоматически применяет поведение, если включен:
page({click: true});
Page.js поддерживает middleware — функции, которые выполняются перед обработчиком маршрута. Это удобно для авторизации, загрузки данных или логирования:
function auth(ctx, next) {
if (!ctx.user) {
page('/login');
} else {
next();
}
}
page('/dashboard', auth, function(ctx) {
console.log('Доступ разрешён');
});
Принципы работы middleware:
ctx и next.next() передаёт управление следующему middleware
или конечному обработчику.page('/profile', middleware1, middleware2, finalHandler);
Для обработки неизвестных путей можно задать маршрут с
'*':
page('*', function(ctx) {
console.log('Страница не найдена:', ctx.path);
});
Такой маршрут сработает, если ни один из предыдущих не подошёл.
Page.js работает с HTML5 History API, что позволяет контролировать навигацию:
page.back() — переход на предыдущую страницу в
истории.page.redirect('/path') — перенаправление без
необходимости повторного клика или вызова обработчика вручную.Пример редиректа:
page('/old-page', function() {
page.redirect('/new-page');
});
Комбинируя маршруты, middleware и динамические параметры, можно построить полноценную SPA:
page('/', homeHandler);
page('/about', aboutHandler);
page('/user/:id', auth, userHandler);
page('*', notFoundHandler);
page();
//about/user/123* → обработчик 404Middleware и обработчики могут быть асинхронными:
page('/user/:id', async function(ctx, next) {
const data = await fetchUser(ctx.params.id);
ctx.userData = data;
next();
});
page('/user/:id', function(ctx) {
renderUser(ctx.userData);
});
Ключевые моменты:
async/await позволяет подгружать данные
перед рендером.next() передаёт управление следующему обработчику
маршрута.page(path, handler)).:param).ctx.querystring).page.show(),
page.redirect()).'*').Эта структура позволяет создавать масштабируемые SPA с чистой организацией маршрутов и гибкой логикой обработки переходов.