#Что означает ошибка
ERR_HTTP_HEADERS_SENT
Ответ отправляется дважды. Добавьте return после res.send(), проверьте асинхронные ветки.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Два ответа | Одна ветка вызывает два res.send. | Завершайте выполнение через return после ответа. |
| Асинхрон | Асинхронный обработчик отвечает после окончания запроса. | Согласуйте await, обработчик ошибок и поток ответа. |
| Ошибка в middleware | Middleware снова отправляет заголовки. | Проверяйте res.headersSent и маршрут next(err). |
| Цикл | Повторный callback отправляет ответ. | Обеспечьте единственную финальную ветку. |
#Пошаговое решение
- Найдите двойную отправку ответаВ Express проверьте стек
Cannot set headers after they are sent to the clientи маршрут, обрабатывавший запрос. Обычно одна ветка вызываетres.send/res.json/res.redirect, а выполнение затем доходит до второго ответа илиnext(err). - Завершайте выполнение после ответаОткройте соответствующий обработчик и после окончательной отправки ставьте
return res.status(400).json({...})илиreturn res.send(...). В ветвлениях обеспечьте ровно один ответ на запрос; не вызывайте одновременноres.sendиres.endдля тех же данных. - Проверьте асинхронные ошибкиЕсли ответ отправлен до завершения
await, поздняя ошибка не должна пытаться сформировать второй ответ. В обработчике ошибок перед отправкой проверяйтеres.headersSentи передавайте ошибку дальше, если заголовки уже ушли; для потокового ответа отдельно обрабатывайте прерывание соединения. - Проверка маршрутаЗапустите приложение в тестовом окружении и отправьте один успешный и один ошибочный запрос. Проверьте единственный HTTP-ответ и отсутствие исключения в логах. Если ошибка остаётся, добавьте диагностический идентификатор запроса, чтобы сопоставить разные асинхронные ветви.
#Если проблема осталась
Если «Node.js (Express): Cannot set headers after they are sent to the client» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.