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'
}

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

Помогите…

Спасибо.



Последнее исправление: alpha (всего исправлений: 1)

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

Ошибка в колбечной дристне. Возьми какой-нибудь axios и не сношай себе мозги.
/thread

crutch_master ★★★★★
()

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

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

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

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

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

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

Всегда был вопрос…

Вот если ваще ничего не понимаешь что тут написано…

Зачем что-то комментировать ?

denisE
() автор топика
Ответ на: комментарий от 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

Улыблнуло…

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

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

Это понятно…

В коде видишь разницу?

Разница только в первом случае https.get, а во в втром https.request.

В первом всё работает, во втором - нет.

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

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

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

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

Там ещё и дебажный выхлоп абсолютно одинаковый.

Действительно любопытно.

Запускал так: NODE_DEBUG=https node test.mjs

С переиспозованием сессии не связано, если что.

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

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

Keltir
()
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от WitcherGeralt

Именно это со мной и произошло…

Проглядел «req.end()» .

Всем спасибо.

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

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

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

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

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

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

Всегда был вопрос…

Зачем выдавливать из себя говнокод, когда есть готовая либа, где уже сделали req.end() и не дали бы тебе обделаться на ровном месте.

crutch_master ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.