Объект запроса
Объект запроса req — первый аргумент каждого обработчика. В нём Express собирает всё, что прислал клиент: метод, адрес, параметры, заголовки и тело. Создавать его не нужно — он приходит готовым.
Основные свойства
// src/app.js
app.get('/debug', (req, res) => {
console.log(req.method); // 'GET'
console.log(req.path); // '/debug'
console.log(req.url); // '/debug?x=1'
console.log(req.query); // { x: '1' }
res.send('Смотрите терминал');
});Откройте http://localhost:3000/debug?x=1 — в браузере будет «Смотрите терминал», а в терминале сервера появятся четыре строки.
| Свойство | Что содержит |
|---|---|
req.method | HTTP-метод: GET, POST и другие |
req.path | Путь без строки запроса |
req.url | Путь вместе со строкой запроса |
req.params | Параметры маршрута |
req.query | Разобранная строка запроса |
req.body | Тело запроса, если подключён разбор |
req.headers | Все заголовки, имена в нижнем регистре |
req.ip | IP-адрес клиента |
req.hostname | Имя хоста из заголовка Host |
Заголовки
Заголовки — служебные строки запроса: язык браузера, тип данных, токен входа. Удобнее всего читать их методом req.get(), он не зависит от регистра имени:
// src/app.js
app.get('/hello', (req, res) => {
const language = req.get('Accept-Language') ?? 'не указан';
res.send(`Язык браузера: ${language}`);
});На странице появится строка вида «Язык браузера: ru-RU,ru;q=0.9,en;q=0.8».
Тело запроса
Данные формы или JSON приходят в теле запроса. Express сам его не читает: пока не подключён разбор, req.body равен undefined. Разбор подключают встроенными middleware — об этом отдельный урок. После этого обработчик получает готовый объект:
// src/app.js
app.post('/posts', (req, res) => {
const title = req.body?.title;
res.send(`Получен заголовок: ${title}`);
});Оператор ?. защищает от ошибки, если тело не пришло вовсе.
Свои данные в запросе
Объект req живёт, пока обрабатывается один запрос. Middleware часто записывают в него свои поля, например найденного пользователя req.user, а обработчики дальше по цепочке их читают. Так это будет устроено в уроке об авторизации.
Частая ошибка
В Express 5 свойство req.query доступно только для чтения: строка вида req.query.page = 1 не изменит его. Если нужно значение по умолчанию, сохраните его в переменную:
// src/app.js
app.get('/posts', (req, res) => {
const page = Number(req.query.page ?? 1);
res.send(`Страница ${page}`);
});