Page.js — это минималистичная библиотека для клиентской маршрутизации в одностраничных приложениях (SPA). Она работает на основе изменения URL через HTML5 History API и поддерживает hash-based маршрутизацию для старых браузеров. Основной принцип — связывать определённые URL с функциями-обработчиками, которые управляют отображением содержимого страницы без её полной перезагрузки.
Маршруты в Page.js описываются с помощью функции
page(path, callback). Путь может быть статическим
(/about) или динамическим с параметрами
(/user/:id), что позволяет извлекать значения параметров
через объект ctx.params внутри обработчика.
page('/user/:id', ctx => {
console.log(ctx.params.id);
});
Page.js оптимально подходит для SPA, где необходимо:
В отличие от серверной маршрутизации, Page.js позволяет клиенту загружать только нужные компоненты, что повышает скорость отклика и снижает нагрузку на сервер.
Поддержка параметров и регулярных выражений делает Page.js удобным инструментом для приложений с динамическими страницами, например:
/user/:id)/article/:slug)/category/:name)page('/article/:slug', ctx => {
const slug = ctx.params.slug;
fetch(`/api/articles/${slug}`)
.then(res => res.json())
.then(data => renderArticle(data));
});
Page.js использует History API для управления состоянием браузера:
page('/', () => showHome());
page('/login', () => showLogin());
page();
Page.js поддерживает middleware, что позволяет вставлять обработчики между маршрутом и рендерингом:
function auth(ctx, next) {
if (!ctx.user) {
page.redirect('/login');
} else {
next();
}
}
page('/dashboard', auth, () => showDashboard());
Page.js упрощает работу с асинхронными операциями перед рендерингом:
fetchimport()page('/profile/:id', async ctx => {
const data = await fetch(`/api/users/${ctx.params.id}`).then(r => r.json());
renderProfile(data);
});
Page.js не навязывает структуру проекта, не требует больших зависимостей и легко интегрируется с:
Её объём — всего несколько килобайт, что делает библиотеку подходящей для небольших и средних проектов, где не нужен полноценный роутер типа React Router.
Библиотека предоставляет возможность извлекать параметры маршрута
(ctx.params) и query-параметры
(ctx.querystring):
page('/search', ctx => {
const query = new URLSearchParams(ctx.querystring).get('q');
searchArticles(query);
});
Это упрощает построение фильтров, поиска и динамических списков.
Page.js позволяет управлять редиректами и обрабатывать неизвестные маршруты:
page('/old-page', () => page.redirect('/new-page'));
page('*', () => showNotFound());
Это особенно важно для поддержания корректной навигации и пользовательского опыта при изменении структуры сайта.
Эти особенности делают Page.js универсальным инструментом для SPA, где важны легковесность, контроль над навигацией и динамическая подгрузка контента. Использование middleware, поддержка параметров маршрутов и query-параметров, а также интеграция с History API позволяют создавать гибкие, быстрые и масштабируемые приложения на чистом JavaScript.