В библиотеке Navigo управление переходами между маршрутами и редиректами реализуется через настройку правил маршрутизации и использование методов навигации. Редиректы могут понадобиться для обеспечения корректного поведения приложения при изменении URL, перенаправлении пользователей на другие страницы или при создании сокращённых маршрутов.
navigate для редиректаМетод navigate(path, options) позволяет программно
изменить URL и инициировать переход на указанный маршрут. Ключевые
моменты:
import Navigo from 'navigo';
const router = new Navigo('/');
router.on('/home', () => {
console.log('Главная страница');
});
router.on('/about', () => {
console.log('О сайте');
});
// Программный редирект с /start на /home
router.on('/start', () => {
router.navigate('/home');
});
router.resolve();
Особенности:
navigate может принимать второй параметр
options с возможностью использования
{ replace: true }, что позволяет заменять текущую запись в
истории браузера вместо создания новой.navigate выполняется мгновенно без
перезагрузки страницы.Иногда необходимо задать правила редиректа на уровне маршрутов. Navigo позволяет использовать функции внутри маршрутов для условного перенаправления:
router.on('/dashboard', () => {
const isLoggedIn = false;
if (!isLoggedIn) {
router.navigate('/login');
} else {
console.log('Панель пользователя');
}
});
Ключевые моменты:
router.on('/profile/:userId', (params) => {
if (!params.userId) {
router.navigate('/error');
}
});
Navigo позволяет создавать универсальные редиректы, которые
срабатывают для всех маршрутов, соответствующих определённым условиям.
Для этого используется событие before:
router.hooks({
before(done, params, current) {
const needsRedirect = current.url === '/old-page';
if (needsRedirect) {
router.navigate('/new-page');
done(false); // прерываем текущий маршрут
} else {
done(); // продолжаем обработку
}
}
});
Важные моменты:
before вызывается до обработки любого
маршрута.done(false) предотвращает вызов текущего обработчика
маршрута.Использование опции { replace: true } в
navigate важно при редиректе с точки зрения UX:
router.on('/old-contact', () => {
router.navigate('/contact', { replace: true });
});
Пояснение:
replace: true пользователь сможет вернуться на
/old-contact, что может быть нежелательно.replace: true текущий URL заменяется, и нажатие
«назад» приведёт к предыдущему действительному маршруту.Для маршрутов с параметрами важно корректно обрабатывать редиректы:
router.on('/product/:id', (params) => {
if (!isProductAvailable(params.id)) {
router.navigate('/products');
}
});
function isProductAvailable(id) {
const availableIds = [101, 102, 103];
return availableIds.includes(Number(id));
}
Особенности:
Navigo поддерживает обработку несуществующих маршрутов через метод
notFound:
router.notFound(() => {
router.navigate('/home');
});
Пояснение:
Редиректы можно использовать совместно с динамическим импортом модулей:
router.on('/settings', async () => {
const isAdmin = await checkAdmin();
if (!isAdmin) {
router.navigate('/access-denied');
} else {
const module = await import('./settingsPage.js');
module.render();
}
});
Преимущества:
before или
отдельные функции.{ replace: true }.Эти подходы позволяют гибко управлять навигацией и перенаправлениями в приложениях на JavaScript, используя возможности библиотеки Navigo.