Page.js предоставляет возможность эффективно управлять маршрутизацией в одностраничных приложениях (SPA). Одной из ключевых особенностей является обработка ситуаций, когда пользователь попадает на несуществующий маршрут. Такие случаи требуют настройки пользовательских страниц ошибок, чтобы приложение оставалось удобным и информативным.
В Page.js страница ошибки — это маршрут, который срабатывает, когда ни один из зарегистрированных маршрутов не совпал с текущим URL. Обычно используется для отображения сообщений типа 404 Not Found, но может включать и другие состояния ошибок, например, 500 Internal Server Error, если маршрут вызывает исключение.
Основная идея заключается в том, чтобы задать маршрут, который будет перехватывать все неопределённые пути.
Page.js обрабатывает маршруты в порядке их объявления. Для создания
страницы ошибки необходимо зарегистрировать маршрут с шаблоном, который
соответствует всем оставшимся URL. Чаще всего используется wildcard
(*) или /:path*.
Пример регистрации пользовательской страницы ошибки:
// Импорт Page.js
import page from 'page';
// Основные маршруты
page('/', () => {
document.body.innerHTML = 'Главная страница
';
});
page('/about', () => {
document.body.innerHTML = 'О нас
';
});
// Маршрут для страницы ошибки
page('*', () => {
document.body.innerHTML = `
404 - Страница не найдена
Извините, запрашиваемая страница не существует.
`;
});
// Инициализация маршрутизации
page();
Ключевой момент: маршрут для ошибки должен идти после всех остальных маршрутов, иначе он будет перехватывать все запросы и другие маршруты никогда не сработают.
Страницы ошибок можно делать динамическими, используя параметры URL или состояние приложения. Например, можно передавать дополнительную информацию о причине ошибки:
page('*', (ctx) => {
const attemptedPath = ctx.path;
document.body.innerHTML = `
404 - Страница не найдена
Вы пытались открыть: ${attemptedPath}
Вернуться на главную
`;
});
Преимущество: отображение точного маршрута, на который пользователь пытался попасть, повышает удобство и позволяет более гибко реагировать на ошибки.
Page.js поддерживает middleware, что позволяет перехватывать ошибки до рендеринга страницы. Это особенно полезно, если приложение динамически загружает данные.
Пример использования middleware для ошибок:
// Middleware для проверки маршрута
function checkRoute(ctx, next) {
const validRoutes = ['/', '/about', '/contact'];
if (!validRoutes.includes(ctx.path)) {
ctx.error = 404;
}
next();
}
page(checkRoute);
// Основные маршруты
page('/', () => document.body.innerHTML = 'Главная
');
page('/about', () => document.body.innerHTML = 'О нас
');
// Middleware для отображения страницы ошибки
page((ctx) => {
if (ctx.error) {
document.body.innerHTML = `${ctx.error} - Страница не найдена
`;
}
});
page();
Особенность: middleware позволяет централизованно управлять ошибками, не дублируя код для каждого маршрута.
Для улучшения UX можно интегрировать страницы ошибок с CSS и компонентной структурой:
page('*', () => {
document.body.innerHTML = `
`;
});
.error-page {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
text-align: center;
font-family: Arial, sans-serif;
}
.error-page h1 {
font-size: 6rem;
margin: 0;
}
.error-page p {
font-size: 1.5rem;
margin: 10px 0 20px;
}
.btn-home {
display: inline-block;
padding: 10px 20px;
background-color: #007bff;
color: white;
text-decoration: none;
border-radius: 5px;
}
Результат: страница ошибки выглядит как полноценный элемент интерфейса, а не простое текстовое сообщение.
Page.js не ограничивается только 404. Можно создавать маршруты для других состояний:
page('/error/500', () => {
document.body.innerHTML = `
500 - Внутренняя ошибка сервера
Произошла ошибка на сервере. Попробуйте позже.
`;
});
page('/error/403', () => {
document.body.innerHTML = `
403 - Доступ запрещён
У вас нет прав для просмотра этой страницы.
`;
});
Вывод: сочетание wildcard маршрутов и отдельных страниц ошибок позволяет гибко управлять любыми ошибочными состояниями приложения.