Node.js LinuxWindowsmacOS

Node.js (Express): Cannot set headers after they are sent to the client

  • Обновлено
  • Чтение ≈ 1 минута

Краткий ответ

Ответ отправляется дважды. Добавьте return после res.send(), проверьте асинхронные ветки.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если проблема осталась

#Что означает ошибка

Сообщение
ERR_HTTP_HEADERS_SENT

Ответ отправляется дважды. Добавьте return после res.send(), проверьте асинхронные ветки.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Два ответаОдна ветка вызывает два res.send.Завершайте выполнение через return после ответа.
АсинхронАсинхронный обработчик отвечает после окончания запроса.Согласуйте await, обработчик ошибок и поток ответа.
Ошибка в middlewareMiddleware снова отправляет заголовки.Проверяйте res.headersSent и маршрут next(err).
ЦиклПовторный callback отправляет ответ.Обеспечьте единственную финальную ветку.

#Пошаговое решение

  1. Найдите двойную отправку ответаВ Express проверьте стек Cannot set headers after they are sent to the client и маршрут, обрабатывавший запрос. Обычно одна ветка вызывает res.send/res.json/res.redirect, а выполнение затем доходит до второго ответа или next(err).
  2. Завершайте выполнение после ответаОткройте соответствующий обработчик и после окончательной отправки ставьте return res.status(400).json({...}) или return res.send(...). В ветвлениях обеспечьте ровно один ответ на запрос; не вызывайте одновременно res.send и res.end для тех же данных.
  3. Проверьте асинхронные ошибкиЕсли ответ отправлен до завершения await, поздняя ошибка не должна пытаться сформировать второй ответ. В обработчике ошибок перед отправкой проверяйте res.headersSent и передавайте ошибку дальше, если заголовки уже ушли; для потокового ответа отдельно обрабатывайте прерывание соединения.
  4. Проверка маршрутаЗапустите приложение в тестовом окружении и отправьте один успешный и один ошибочный запрос. Проверьте единственный HTTP-ответ и отсутствие исключения в логах. Если ошибка остаётся, добавьте диагностический идентификатор запроса, чтобы сопоставить разные асинхронные ветви.

#Если проблема осталась

Если «Node.js (Express): Cannot set headers after they are sent to the client» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.