В логах работы NodeJS приложения можно увидеть ошибки, где в качестве сообщения выступает строка «socket hang up«. Дословно на русский язык это можно перевести как «розетка повесить трубку«.
Если по простому, то это означает, что мы сами остановили выполнение нашего HTTP-запроса методом destroy(). По какой причине?
Причин может быть масса:
- Мы послали запрос, но очень долго не можем получить ответ с сервера и поэтому приняли решение досрочно завершить этот долгий запрос
- Мы послали слишком много запросов, но часть из них нужно срочно прервать, чтобы высвободить память для другого процесса
- Мы отправили запрос, на ошибочный адрес и быстро поняли что не туда отправили
- Мы отправляем запросы, а доступ в интернет прекратился
Задача метода destroy() — уничтожить запрос. Необязательно генерировать событие error «ошибка» и генерировать событие close «закрыть». Вызов этого приведет к удалению оставшихся данных в ответе и уничтожению сокета.
Если метод destroy() вызывается до назначения сокета, следующие события будут сгенерированы в следующем порядке:
- (req.destroy() вызвали здесь)
- ‘error‘ с ошибкой с сообщением ‘Error: socket hang up‘ и свойством code равным ‘ECONNRESET‘
- ‘close‘
Если метод destroy() вызывается до успешного подключения, следующие события будут сгенерированы в следующем порядке:
- ‘socket‘
- (req.destroy() вызвали здесь)
- ‘error‘ с ошибкой с сообщением ‘Error: socket hang up‘ и свойством code равным ‘ECONNRESET‘
- ‘close‘
Если метод destroy() вызывается после получения ответа, следующие события будут сгенерированы в следующем порядке:
- ‘socket‘
- ‘response‘
- ‘data‘ любое количество раз на объекте res
- (req.destroy() вызвали здесь)
- ‘aborted‘ на объекте res
- ‘error‘ в объекте res с ошибкой с сообщением ‘Error: aborted‘ и свойством code равным ‘ECONNRESET‘.
- ‘close‘
- ‘close‘ на объекте res
Информационные ссылки
Стандарт NodeJS — https://nodejs.org/api/
Стандарт NodeJS — Модуль HTTPS — Метод request() — Синтаксис 1 — https://nodejs.org/api/https.html#httpsrequestoptions-callback
Стандарт NodeJS — Модуль HTTPS — Метод request() — Синтаксис 2 — https://nodejs.org/api/https.html#httpsrequesturl-options-callback
Стандарт NodeJS — Модуль HTTP — Метод destroy([error]) — https://nodejs.org/dist/latest-v19.x/docs/api/http.html#requestdestroyerror