Параметры маршрутов (route parameters) — это часть URL, которая используется для передачи данных в маршрутизаторе веб-приложений. Они позволяют динамически определять, какие данные нужно обработать на основе URL. В JavaScript, особенно в среде Node.js с использованием фреймворка Express, параметры маршрутов играют ключевую роль в построении REST API и динамических веб-приложений.
Параметры маршрутов обозначаются двоеточием : перед
именем переменной в строке маршрута. Пример базового маршрута с
параметром:
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.send(`Пользователь с ID: ${userId}`);
});
/users/:id — маршрут с параметром id.req.params.id — объект запроса содержит значения
параметров маршрута.Параметры могут быть любыми строками, которые соответствуют сегменту
URL между слешами. Например, /products/:category/:productId
позволяет извлекать одновременно категорию и идентификатор продукта.
app.get('/products/:category/:productId', (req, res) => {
const { category, productId } = req.params;
res.send(`Категория: ${category}, Продукт: ${productId}`);
});
Express поддерживает необязательные параметры с помощью символа
?. Такой параметр может присутствовать в URL, а может
отсутствовать:
app.get('/users/:id?', (req, res) => {
const userId = req.params.id || 'не указан';
res.send(`Пользователь: ${userId}`);
});
id отсутствует в URL, req.params.id
будет undefined.Параметры маршрутов можно ограничивать с помощью регулярных выражений. Это полезно для валидации идентификаторов или других данных прямо на уровне маршрута:
app.get('/orders/:orderId(\\d+)', (req, res) => {
res.send(`Заказ №${req.params.orderId}`);
});
\\d+ ограничивает параметр только числами.Регулярные выражения позволяют создавать сложные маршруты, которые различают различные типы параметров и предотвращают обработку некорректных URL.
Маршруты могут содержать несколько параметров, включая вложенные:
app.get('/users/:userId/posts/:postId', (req, res) => {
const { userId, postId } = req.params;
res.send(`Пользователь ${userId}, пост ${postId}`);
});
req.params.users → posts).Параметры маршрутов отличаются от query-параметров
(req.query), которые передаются после ? в
URL:
app.get('/search/:term', (req, res) => {
const term = req.params.term;
const page = req.query.page || 1;
res.send(`Поиск по "${term}", страница ${page}`);
});
:term — обязательный параметр маршрута.?page=2 — query-параметр, необязательный.Express поддерживает middleware для обработки всех маршрутов с
определённым параметром через router.param:
app.param('userId', (req, res, next, userId) => {
req.user = { id: userId, name: `User${userId}` };
next();
});
app.get('/users/:userId', (req, res) => {
res.send(`Пользователь: ${req.user.name}`);
});
router.param вызывается автоматически для всех
маршрутов с указанным параметром.router.param:
Централизованная обработка параметров сокращает повторяющийся код и
улучшает читаемость.%20 →
пробел).Параметры маршрутов — фундаментальный инструмент построения динамических маршрутов в JavaScript. Они обеспечивают гибкость и читаемость кода при работе с REST API, динамическими страницами и сложными структурами URL. Правильное использование параметров вместе с регулярными выражениями и middleware позволяет создавать масштабируемые и поддерживаемые веб-приложения.