Navigo — это лёгкая библиотека маршрутизации для JavaScript, позволяющая управлять переходами между страницами без перезагрузки. Важной частью маршрутизации является валидация путей, которая гарантирует корректное сопоставление URL с обработчиками маршрутов и предотвращает неожиданные ошибки при навигации.
Маршруты в Navigo могут содержать динамические
сегменты, обозначаемые двоеточием (:).
Например:
const router = new Navigo('/');
router.on('/user/:id', (params) => {
console.log(params.id);
});
В этом примере :id — динамический параметр. Navigo
автоматически выделяет значение из URL и передает его в обработчик через
объект params.
Ключевые моменты:
params.Navigo позволяет задавать регулярные выражения для динамических сегментов, чтобы ограничивать допустимые значения:
router.on('/user/:id(\\d+)', (params) => {
console.log(params.id);
});
Здесь :id(\\d+) ограничивает значение только числами.
Если URL будет /user/abc, маршрут не сработает.
Рекомендации:
\\ вместо \).Navigo поддерживает функцию middleware, которая вызывается перед обработчиком маршрута. Это позволяет проверять параметры и права доступа:
router.on('/dashboard/:section', (params, query, done) => {
if (!['home', 'settings', 'profile'].includes(params.section)) {
done(false); // Отмена маршрута
} else {
done(); // Продолжение маршрута
}
});
Особенности:
done(false) предотвращает дальнейшую обработку
маршрута.Navigo поддерживает необязательные сегменты с использованием скобок:
router.on('/search(/:query)', (params) => {
console.log(params.query); // undefined, если сегмент отсутствует
});
() делают часть маршрута необязательной.Сегменты с символом * позволяют принимать произвольные
значения:
router.on('/files/*path', (params) => {
console.log(params.path);
});
/files/ попадут в
params.path.Navigo предоставляет доступ к query-параметрам через второй аргумент обработчика:
router.on('/products', (params, query) => {
if (!query.category) {
console.warn('Не указана категория');
}
});
query — объект с ключами и значениями параметров после
?.router.on('/orders/:orderId(\\d+)(/:action(edit|view))', (params, query, done) => {
if (!params.action) params.action = 'view'; // Установить значение по умолчанию
if (parseInt(params.orderId, 10) <= 0) {
done(false); // Некорректный ID
} else {
done();
}
});
В этом примере реализована:
orderId.action только на edit
или view.Строгая валидация путей в Navigo сочетает:
Эти инструменты позволяют строить безопасные и предсказуемые маршруты, обеспечивая корректную навигацию внутри приложения.