Page.js — это микробиблиотека для маршрутизации в браузере на стороне клиента, которая позволяет управлять URL без перезагрузки страницы. Одним из ключевых инструментов при построении SPA (Single Page Application) являются условные переходы, когда направление маршрутизации зависит от состояния приложения или данных пользователя.
page.redirect() для условной навигацииМетод page.redirect(from, to) позволяет перенаправить
пользователя с одного маршрута на другой. Его часто применяют для
реализации условных переходов:
page('/dashboard', ctx => {
if (!ctx.user) {
page.redirect('/login'); // если пользователь не авторизован, отправляем на страницу логина
return;
}
renderDashboard(ctx.user);
});
Здесь ключевой момент — проверка состояния перед
отрисовкой. Если условие выполняется,
page.redirect изменяет URL и инициирует переход без
перезагрузки страницы.
Для комплексных приложений удобно использовать промежуточные функции (middleware) для проверки доступа:
function requireAuth(ctx, next) {
if (!ctx.user) {
page.redirect('/login');
} else {
next();
}
}
page('/profile', requireAuth, ctx => {
renderProfile(ctx.user);
});
ctx содержит текущий контекст маршрута, включая
параметры и состояние.next() вызывает следующую функцию в цепочке middleware,
если условие пройдено.Page.js поддерживает динамические сегменты URL:
page('/posts/:id', ctx => {
const postId = ctx.params.id;
if (!isValidPost(postId)) {
page.redirect('/404');
return;
}
renderPost(postId);
});
Ключевые моменты:
ctx.params позволяет извлечь динамические части
маршрута.Можно строить переходы не только по URL, но и по внутреннему состоянию приложения:
page('/checkout', ctx => {
if (!cart.hasItems()) {
page.redirect('/cart'); // если корзина пуста, перенаправляем на страницу корзины
return;
}
renderCheckout(cart);
});
Этот подход особенно полезен для логики шагов в процессе оформления заказа, заполнения форм или авторизации.
В сложных приложениях часто необходимо проверять несколько условий одновременно:
page('/admin', ctx => {
if (!ctx.user) {
page.redirect('/login');
return;
}
if (!ctx.user.isAdmin) {
page.redirect('/not-authorized');
return;
}
renderAdminPanel();
});
Такое многоуровневое условное перенаправление позволяет строго контролировать доступ к различным разделам приложения.
page.exit() для отмены маршрутаPage.js предоставляет метод page.exit(path, callback)
для выполнения действий при выходе с определённого маршрута. Его можно
использовать для условных переходов, связанных с состоянием
страницы:
page('/editor', ctx => {
renderEditor(ctx.document);
});
page.exit('/editor', ctx => {
if (ctx.hasUnsavedChanges) {
if (!confirm('Есть несохранённые изменения. Покинуть страницу?')) {
page.redirect('/editor'); // отменяем переход
}
}
});
Особенности:
page.redirect() вместо ручного
изменения window.location. Это сохраняет
SPA-поведение без полной перезагрузки страницы.Условные переходы в Page.js строятся вокруг проверки состояния, middleware и редиректов. Этот набор инструментов позволяет реализовать сложные сценарии навигации, включая:
Эффективная комбинация этих подходов делает маршрутизацию гибкой, безопасной и предсказуемой в современных SPA.