Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Объект запроса

Объект запроса 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.methodHTTP-метод: GET, POST и другие
req.pathПуть без строки запроса
req.urlПуть вместе со строкой запроса
req.paramsПараметры маршрута
req.queryРазобранная строка запроса
req.bodyТело запроса, если подключён разбор
req.headersВсе заголовки, имена в нижнем регистре
req.ipIP-адрес клиента
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}`);
});

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.