You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中https.get正常运行但https.request报ECONNRESET错误如何解决

问题原因

你调用https.request之后没有手动调用req.end()方法来结束请求发送流程,导致请求一直没有实际发出,服务器端主动断开了连接,所以抛出ECONNRESET错误。

两者核心差异

  • https.get是https.request的便捷封装,内部默认设置请求方法为GET,且会在创建请求对象后自动调用req.end()完成请求发送,不需要手动操作。
  • https.request是更底层的通用接口,支持所有HTTP方法,也支持发送请求体(比如POST的表单、JSON数据),所以需要你在组装完所有请求相关逻辑后,手动调用req.end()来告知Node.js你已经完成请求配置,可以把请求发送出去了。如果你没调用这个方法,请求会一直处于待发送状态,超时后服务端就会断开TCP连接,触发socket hang up的错误。

修复后的代码

只需要在runRequest方法的请求对象定义末尾新增req.end()即可:

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()
  })
}

如果是POST等需要发送请求体的场景,你可以在调用req.end()之前通过req.write()方法写入请求体数据,全部写完后再调用req.end()即可。

内容的提问来源于stack exchange,提问作者egorovd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:54:01