LINUX.ORG.RU

Тупняк... [Error: socket hang up ECONNRESET]

 


0

1

Всем привет.

Есть код:


import https from 'https'

async function runGetRequest () {
  return new Promise((resolve, reject) => {
    const req = https.get({
      hostname: 'jsonplaceholder.typicode.com',
      method: 'GET',
      path: '/todos/1'
    }, (resp) => {
      console.log(`statusCode: ${resp.statusCode}`)
      const data = []
      resp.on('data', (chunk) => {
        data.push(chunk)
      })
      resp.on('end', () => {
        resolve(Buffer.concat(data).toString())
      })
      resp.on('error', (err) => {
        reject(err)
      })
    }).on('error', (err) => {
      reject(err)
    }).on('timeout', (err) => {
      reject(err)
      req.abort()
    }).on('uncaughtException', (err) => {
      reject(err)
      req.abort()
    })
  })
}

async function runRequest () {
  return new Promise((resolve, reject) => {
    const req = https.request({
      hostname: 'jsonplaceholder.typicode.com',
      method: 'GET',
      path: '/todos/1'
    }, (resp) => {
      console.log(`statusCode: ${resp.statusCode}`)
      const data = []
      resp.on('data', (chunk) => {
        data.push(chunk)
      })
      resp.on('end', () => {
        resolve(Buffer.concat(data).toString())
      })
      resp.on('error', (err) => {
        reject(err)
      })
    }).on('error', (err) => {
      reject(err)
    }).on('timeout', (err) => {
      reject(err)
      req.abort()
    }).on('uncaughtException', (err) => {
      reject(err)
      req.abort()
    })
  })
}


console.log(await runGetRequest())
console.log(await runRequest())

Запускаю так:

node --harmony-top-level-await --es-module-specifier-resolution=node --enable-source-maps --inspect r.js

Функция runGetRequest - отрабатывает, а runRequest отваливается с :

Error: socket hang up
  at connResetException (node:internal/errors:691:14)
  at TLSSocket.socketOnEnd (node:_http_client:471:23)
  at TLSSocket.emit (node:events:406:35)
  at endReadableNT (node:internal/streams/readable:1343:12)
  at processTicksAndRejections 
 (node:internal/process/task_queues:83:21) {
 code: 'ECONNRESET'
}

Почему? Где ошибка?

Помогите…

Спасибо.


пагуглить влом?

ну вот например:

https://stackoverflow.com/questions/17245881/how-do-i-debug-error-econnreset-in-node-js

на жескрипте не писал, диагностик не знаю, но это какой то отказ от удаленного конца скорее всего. он типа сокет закрыл что ли.

опять же tls - может верификация не прошла

alysnix ()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от denisE

Зато он умеет гуглить, в отличие от.

По ссылке:

«ECONNRESET» means the other side of the TCP conversation abruptly closed its end of the connection

Ну и всё остальное тебе на это намекает:

TLSSocket.socketOnEnd

connResetException

А вот ответ: https://x1site.ru/1162

P.S. На джаваскрипте писал.

WitcherGeralt ★★ ()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от denisE

у меня лично, когда я игрался на плюсах с tls соединением подобного рода эффект возникал, если противоположный конец, обнаружив что tls хендшейк не проходит, закрывал сокет. а не проходил он потому, что сертификаты были неподходящими(в моем случае).

я даже больше скажу. tls хендшейк мог не проходить потому, что пинг был долгий типа 100 мс, а на время хеншейка стоял небольшой таймаут. и на быстрых коннектах все работало, а на больших пингах - вылетало по таймауту. сокет закрывался и пир получал отказ такого вот рода.

alysnix ()
Последнее исправление: alysnix (всего исправлений: 2)
Ответ на: комментарий от WitcherGeralt

тут помогли.

должно быть


async function runRequest () {
  return new Promise((resolve, reject) => {
    const req = https.request({
      hostname: 'jsonplaceholder.typicode.com',
      method: 'GET',
      path: '/todos/1'
    }, (resp) => {
      console.log(`statusCode: ${resp.statusCode}`)
      const data = []
      resp.on('data', (chunk) => {
        data.push(chunk)
      })
      resp.on('end', () => {
        resolve(Buffer.concat(data).toString())
      })
      resp.on('error', (err) => {
        reject(err)
      })
    }).on('error', (err) => {
      reject(err)
    }).on('timeout', (err) => {
      reject(err)
      req.abort()
    }).on('uncaughtException', (err) => {
      reject(err)
      req.abort()
    })
   

    req.end() // <- это
 
  })
}

denisE ()
Ответ на: комментарий от denisE

Хм, это было бы логично, если бы в методе был пост/пут/*. Из-за кучи коллбеков я тоже это проглядел, когда читал доку.

WitcherGeralt ★★ ()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от Keltir

Это самый распространнёный грешок ИТшников. Думают, что разбираются во всем и сразу. Что там, языки программирования: «ифы», «форы»- все одинаковое, значит разбираюсь :D

Ну тогда к ТС первая претензия - куда ж он на js писать полез если даже ECONNRESET не умеет отлаживать. А alysnix во-первых, хотел помочь, во-вторых, всё правильно сказал. А самый распространённый грешок ИТшников - это наглость, хамство и неблагодарность.

slovazap ★★★★★ ()
Ответ на: комментарий от slovazap

ну хз, у меня ни к кому притензий нет, это вы уж как-то сами. Я высказл своё наблюдение, которое сделал на основе многих лет в индустрии. это - субъективное мнение, безусловно. и у вас может быть другое. наглость, хамство и неблагодарность - это грешок всех людей, вне зависимости от профессии (тоже субъективное наблюдение)

Keltir ()