Navigo — это легковесный клиентский роутер для JavaScript, который позволяет управлять навигацией без перезагрузки страницы. Одним из важных аспектов при работе с Navigo является обработка и логирование ошибок, возникающих при маршрутизации. Для этого библиотека предоставляет гибкие механизмы, позволяющие отслеживать неправильные URL, некорректные обработчики маршрутов или исключения в колбэках.
notFoundОдной из базовых возможностей для перехвата ошибок является метод
.notFound(handler). Он вызывается в случае, если текущий
URL не соответствует ни одному зарегистрированному маршруту:
import Navigo from 'navigo';
const router = new Navigo('/');
router
.on('/home', () => {
console.log('Главная страница');
})
.on('/about', () => {
console.log('О нас');
})
.notFound(() => {
console.error('Маршрут не найден');
})
.resolve();
Особенности использования:
handler принимает функцию без аргументов, что позволяет
централизованно логировать недопустимые маршруты.Маршруты в Navigo могут содержать сложную логику, включая асинхронные
вызовы и динамическую подгрузку данных. Для корректного логирования
ошибок рекомендуется оборачивать обработчики в блоки
try...catch:
router.on('/profile/:id', async (params) => {
try {
const userData = await fetchUserData(params.id);
renderProfile(userData);
} catch (error) {
console.error('Ошибка при загрузке профиля:', error);
}
});
Ключевые моменты:
error, чтобы сохранять стек
вызовов.Navigo позволяет добавлять пользовательские middleware через
.hooks(). С помощью хука before можно
перехватывать навигацию и логировать потенциальные ошибки до выполнения
обработчика маршрута:
router.hooks({
before(done, params) {
try {
validateParams(params);
done();
} catch (error) {
console.error('Ошибка валидации параметров маршрута:', error);
done(false);
}
}
});
Особенности:
done(false) предотвращает выполнение
обработчика маршрута при ошибке.Для маршрутов с динамической загрузкой компонентов или данных важно правильно обрабатывать промисы:
router.on('/dashboard', () => {
import('./dashboard.js')
.then(module => module.initDashboard())
.catch(error => console.error('Ошибка при загрузке Dashboard:', error));
});
Особенности:
.catch() для промисов гарантирует, что
ошибки не останутся незамеченными.Для сложных приложений полезно создавать централизованный модуль логирования:
function logError(context, error) {
console.error(`[${context}]`, error);
// Здесь можно добавить отправку ошибок на сервер
}
router.on('/settings', () => {
try {
loadSettings();
} catch (error) {
logError('Настройки', error);
}
});
router.notFound(() => logError('Маршрут', 'Не найден'));
Преимущества:
error.stack) для детальной диагностики.async/await, чтобы избежать «потерянных» исключений.Логирование ошибок в Navigo не ограничивается лишь выводом в консоль.
Грамотное использование методов .notFound(), хуков и
централизованных функций позволяет строить надежную архитектуру
маршрутизации с прозрачным контролем ошибок.