Page.js — это минималистичная библиотека для
маршрутизации на стороне клиента в JavaScript, обеспечивающая управление
переходами между страницами без перезагрузки. Она использует паттерн
single-page application (SPA) и позволяет привязывать
обработчики к конкретным маршрутам, управлять параметрами URL и историей
браузера через history API.
page('/home', () => {
console.log('Страница Home загружена');
});
page.start();
Метод page(path, callback) регистрирует маршрут. Метод
page.start() запускает прослушивание изменений URL и
инициализирует работу маршрутизатора.
Page.js поддерживает динамические сегменты URL, что позволяет извлекать параметры из маршрута.
page('/user/:id', (ctx) => {
console.log(ctx.params.id); // выводит ID пользователя
});
Ключевые моменты:
:param — обязательный параметр маршрута.* — wildcard для подстановки произвольной части
пути.ctx.params — объект с параметрами маршрута.ctx.path — полный путь запроса.ctx.querystring — строка запроса после
?.Page.js поддерживает middleware-подход, аналогичный Express.js. Middleware вызываются последовательно для обработки запросов.
function auth(ctx, next) {
if (!ctx.user) {
page('/login');
} else {
next();
}
}
page('/dashboard', auth, (ctx) => {
console.log('Доступ разрешён');
});
Особенности middleware:
next().page('*', middleware).Page.js обеспечивает работу с историей браузера через
pushState и popState.
page('/about', () => { console.log('О странице'); });
page('/contact', () => { console.log('Контакты'); });
page.show('/about'); // программная навигация
page.back(); // возвращение на предыдущий маршрут
Особенности навигации:
page.show(path) инициирует переход без
перезагрузки.page.redirect(from, to) позволяет перенаправлять старые
маршруты.Page.js позволяет обрабатывать query-параметры и хэш.
page('/search', (ctx) => {
const params = new URLSearchParams(ctx.querystring);
console.log(params.get('q'));
});
Хэш-фрагменты (#section) можно учитывать через
middleware:
page('*', (ctx, next) => {
console.log('Хэш:', ctx.hash);
next();
});
В реальных проектах часто необходимо обеспечивать деградацию функциональности — корректное поведение приложения при отключённом JavaScript или ограниченной поддержке браузера. Для Page.js это особенно важно, так как маршрутизация полностью зависит от JavaScript.
Методы деградации:
Серверная поддержка маршрутов
/user/123 на сервере должен возвращать
HTML-шаблон с соответствующим контентом.Универсальные ссылки
<a href="/page">)
должны содержать правильный href.<a href="/dashboard">Панель</a>
Минимальный функциональный слой
Graceful degradation middleware
page('*', (ctx, next) => {
if (!window.fetch) {
ctx.fallback = true;
}
next();
});
Для поддержания доступности и деградации функциональности Page.js можно интегрировать с подходом Progressive Enhancement:
Пример структуры приложения:
<nav>
<a href="/home">Главная</a>
<a href="/profile">Профиль</a>
</nav>
<div id="app">
<!-- базовый HTML-контент -->
</div>
<script src="page.min.js"></script>
<script>
page('/home', () => { console.log('JS-навигация Home'); });
page('/profile', () => { console.log('JS-навигация Profile'); });
page.start();
</script>
В этом случае пользователи без JS видят полноценные страницы, а пользователи с JS получают плавную маршрутизацию и интерактивность.
<a> вместо
onclick для навигации.history.pushState перед вызовом
page.start().if (!window.history.pushState) {
console.warn('Браузер не поддерживает pushState. Маршрутизация будет деградировать.');
}
Эти приёмы обеспечивают корректное поведение SPA в любых условиях, сохраняя доступность контента и минимизируя риск поломки функционала при ограничениях браузера или отключенном JavaScript.