Библиотека Page.js позволяет создавать маршруты с динамическими параметрами, которые можно ограничивать с помощью регулярных выражений. Это даёт возможность точно контролировать, какие URL будут соответствовать определённым обработчикам.
Динамический параметр обозначается через двоеточие :.
Например:
page('/user/:id', ctx => {
console.log(ctx.params.id);
});
В этом примере маршрут /user/123 создаст объект
ctx.params с ключом id и значением
'123'.
Для ограничения допустимых значений параметра можно использовать
круглые скобки с регулярным выражением. Синтаксис:
:параметр(регулярное_выражение).
Пример:
page('/order/:orderId(\\d+)', ctx => {
console.log(ctx.params.orderId); // Только числа
});
\\d+ — регулярное выражение, разрешающее только
последовательности цифр./order/abc), маршрут не сработает.Можно комбинировать несколько параметров с разными ограничениями:
page('/product/:category([a-z]+)/:id(\\d+)', ctx => {
console.log(ctx.params.category, ctx.params.id);
});
В этом примере:
category допускает только строчные буквы
([a-z]+).id допускает только цифры (\d+).Маршруты вида /product/electronics/42 будут работать, а
/product/123/abc — нет.
Page.js поддерживает необязательные параметры через знак
?. Регулярные выражения применяются только при наличии
параметра.
page('/search/:query([a-zA-Z0-9]+)?', ctx => {
console.log(ctx.params.query);
});
/search/, ctx.params.query будет
undefined./search/laptop123,
ctx.params.query вернёт 'laptop123'.Регулярные выражения позволяют задавать набор допустимых значений
через оператор |:
page('/color/:type(red|green|blue)', ctx => {
console.log(ctx.params.type);
});
/color/red,
/color/green, /color/blue./color/yellow не соответствует маршруту.Если URL не проходит регулярное выражение, Page.js автоматически пропускает маршрут и ищет следующий подходящий. Это позволяет создавать строгие правила маршрутизации без дополнительных проверок внутри обработчика.
page('/post/:id(\\d+)', ctx => {
// Этот код выполнится только если id — число
});
ctx.params.id
соответствует регулярному выражению.if (isNaN(ctx.params.id)).Можно комбинировать обязательные и необязательные параметры с ограничениями:
page('/user/:id(\\d+)/:tab(posts|comments)?', ctx => {
console.log(ctx.params.id, ctx.params.tab);
});
/user/10/posts →
{id: "10", tab: "posts"}/user/10/comments →
{id: "10", tab: "comments"}/user/10/ →
{id: "10", tab: undefined}/user/abc/posts → не срабатывает\\d вместо \d) из-за особенностей синтаксиса
строки в JavaScript.| Синтаксис | Описание | ||
|---|---|---|---|
:param |
Динамический параметр без ограничений | ||
:param(regex) |
Динамический параметр с регулярным выражением | ||
:param? |
Необязательный параметр | ||
:param(regex)? |
Необязательный параметр с ограничением | ||
:param(val1 | val2 | val3) |
Параметр с альтернативными значениями |
Этот подход позволяет создавать чёткие и предсказуемые маршруты, исключая ошибки при передаче неправильных параметров и упрощая обработку URL в приложении на Page.js.