В библиотеке Navigo обработка несуществующих маршрутов реализуется с помощью функции, которая перехватывает любые запросы, не сопоставленные с зарегистрированными маршрутами. Это позволяет управлять поведением приложения при ошибках навигации и отображать кастомизированные страницы «Не найдено» или выполнять перенаправления на другие маршруты.
Для регистрации обработчика 404 используется метод
.notFound(handler). Этот метод принимает один
параметр — функцию-обработчик, которая вызывается, если текущий
URL не совпадает ни с одним зарегистрированным маршрутом.
Пример базовой регистрации:
import Navigo from 'navigo';
const router = new Navigo('/');
router
.on('/', () => {
console.log('Главная страница');
})
.on('/about', () => {
console.log('Страница "О нас"');
})
.notFound(() => {
console.log('Страница не найдена');
});
router.resolve();
В данном примере, если пользователь перейдёт по URL
/contact, который не зарегистрирован, вызовется функция
внутри .notFound(), и в консоль будет выведено сообщение
«Страница не найдена».
Функция-обработчик 404 получает объект params и объект
query, аналогично обычным маршрутам. Это позволяет
анализировать URL и, при необходимости, делать динамический рендеринг
страницы или логирование:
router.notFound(({ params, query }) => {
console.log('Несуществующий маршрут:', params);
console.log('Параметры запроса:', query);
});
Таким образом, можно извлекать информацию о попытках обращения к несуществующим страницам и строить на основе этого поведение приложения.
Обработчик 404 можно использовать для динамической генерации контента. Например, выводить кастомизированное сообщение с ссылкой на главную страницу:
router.notFound(() => {
document.body.innerHTML = `
<h1>404 — Страница не найдена</h1>
<p>Перейти на <a href="/">главную страницу</a>.</p>
`;
});
Такой подход позволяет полностью контролировать отображение и оформление страницы ошибки в рамках SPA (Single Page Application), не требуя перезагрузки страницы.
Иногда вместо отображения статической страницы ошибки требуется
перенаправление на другой маршрут. В Navigo это можно сделать, используя
метод navigate:
router.notFound(() => {
router.navigate('/');
});
В этом случае любой несуществующий маршрут будет автоматически перенаправлен на главную страницу приложения.
Navigo позволяет использовать параметры в маршрутах, но если не найдено совпадений, обработчик 404 срабатывает всегда после попытки сопоставления со всеми маршрутами, включая динамические с параметрами и регулярные выражения. Это гарантирует, что обработчик срабатывает только для действительно неизвестных маршрутов:
router
.on('/user/:id', ({ data }) => {
console.log('Пользователь с id:', data.id);
})
.notFound(() => {
console.log('Маршрут не существует');
});
Например, переход на /user/123 вызовет первый маршрут, а
/user/abc/extra сработает обработчик 404.
Метод .notFound() может использоваться совместно с
.on() и .resolve(). Важно вызывать
router.resolve() после всех регистраций маршрутов, чтобы
Navigo проверил URL и вызвал корректный обработчик:
router
.on('/home', () => console.log('Home'))
.on('/profile/:id', ({ data }) => console.log('Profile', data.id))
.notFound(() => console.log('Страница не найдена'));
router.resolve();
Если после этого изменить URL вручную на /settings,
Navigo вызовет .notFound().
Обработчик 404 удобно использовать для сбора статистики о попытках перехода на несуществующие страницы. Можно интегрировать отправку данных на сервер или аналитические платформы:
router.notFound(({ location }) => {
fetch('/api/log-404', {
method: 'POST',
body: JSON.stringify({ path: location }),
headers: { 'Content-Type': 'application/json' }
});
});
Здесь location — объект текущего URL, предоставляемый
Navigo, который содержит pathname и query
параметры.
.notFound() после всех основных
маршрутов.