Navigo — это лёгкий и гибкий роутер для JavaScript, который позволяет создавать маршруты с параметрами различной структуры. Одним из мощных инструментов является возможность использования необязательных параметров, что делает маршрутизацию более динамичной и удобной для приложений с вариативной структурой URL.
Необязательные параметры в маршрутах обозначаются с помощью
? после имени параметра:
const router = new Navigo('/', { hash: true });
router.on('/user/:id?', (params) => {
console.log(params.id);
});
В данном примере параметр id может присутствовать в URL,
а может отсутствовать.
/user/42, то
params.id будет равно "42"./user/, то
params.id будет undefined.Можно создавать маршруты с комбинацией обязательных и необязательных параметров. Например:
router.on('/product/:category/:id?', (params) => {
console.log(params.category, params.id);
});
/product/electronics/123 →
params.category = "electronics",
params.id = "123"/product/electronics/ →
params.category = "electronics",
params.id = undefinedКлючевой момент: необязательный параметр всегда должен быть в конце маршрута, иначе роутер не сможет корректно сопоставить URL.
Для более сложных случаев можно использовать необязательные группы с
круглыми скобками ():
router.on('/archive(/:year)(/:month)', (params) => {
console.log(params.year, params.month);
});
/archive/2026/03 → params.year = "2026",
params.month = "03"/archive/2026 → params.year = "2026",
params.month = undefined/archive/ → params.year = undefined,
params.month = undefinedЭта структура позволяет создавать гибкие маршруты, где каждый сегмент может быть опциональным, без необходимости писать множество отдельных роутов.
Navigo не предоставляет встроенный механизм для значений по умолчанию, но их легко реализовать вручную:
router.on('/search/:query?', (params) => {
const query = params.query || 'all';
console.log(query);
});
/search/javascript → "javascript"/search/ → "all"Таким образом, можно обеспечить предсказуемое поведение приложения даже при отсутствии параметра в URL.
Можно ограничивать значения параметров с помощью регулярных выражений:
router.on('/order/:id(\\d+)?', (params) => {
console.log(params.id);
});
/order/123 → params.id = "123"/order/abc → не совпадает с маршрутом/order/ → params.id = undefinedСовет: всегда проверять совместимость регулярных выражений с необязательными параметрами, чтобы избежать неожиданных совпадений.
/user/:id? позволяет
использовать один маршрут как для списка пользователей
(/user), так и для конкретного пользователя
(/user/42)./archive(/:year)(/:month) удобно использовать для
динамических архивов или календарных фильтров./search/:query?
позволяет использовать один роут для страницы поиска с и без заданного
запроса.Эти подходы сокращают количество маршрутов и делают код более чистым и поддерживаемым.
undefined помогает
корректно подставлять значения по умолчанию.Использование необязательных параметров в Navigo даёт возможность создавать гибкие и компактные маршруты, сокращая дублирование кода и улучшая читаемость логики роутинга. Комбинации скобок, регулярных выражений и ручной установки значений по умолчанию позволяют покрыть практически любые сценарии URL-структур в современных одностраничных приложениях.