Выбор ответа Junior HTTP-сервер, Express, NestJS обновлено

req.body равен undefined

Вопрос

Клиент шлёт POST с JSON и заголовком Content-Type: application/json, а в Express-обработчике req.body это undefined. Самая вероятная причина?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Не подключён app.use(express.json()) до роута. Тело запроса это поток, Express сам его не читает.

Варианты ответа

  1. Не подключён app.use(express.json()) до роутаправильный ответ
  2. Клиент должен слать text/plain
  3. Express не поддерживает JSON без дополнительного пакета
  4. POST-запросы в Express читаются через req.query

Разбор

Тело запроса это поток, Express сам его не читает. Middleware express.json() читает поток, парсит JSON и кладёт результат в req.body. Подключить его нужно до роутов.

  • text/plain JSON-парсер как раз проигнорирует.
  • Парсер JSON встроен в Express с версии 4.16, отдельный body-parser не нужен.
  • req.query это параметры строки запроса, а не тело.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.