Node.js HTTP GET“ECONNRESET”读取时出错

时间:2017-10-10 11:52:20

标签: javascript java node.js spring axios

我已经在SO和GitHub上阅读了有关此错误的所有相关问题,但似乎没有一个能解决这种情况。

当我运行以下代码时:

response = await axios.get('http://localhost:8082/panda, {
  httpAgent: new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 })
});

我收到以下错误:

{ Error: socket hang up
    at createHangUpError (_http_client.js:345:15)
    at Socket.socketOnEnd (_http_client.js:437:23)
    at emitNone (events.js:110:20)
    at Socket.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9) code: 'ECONNRESET' }
{ Error: read ECONNRESET
    at _errnoException (util.js:1019:11)
    at TCP.onread (net.js:608:25)
  code: 'ECONNRESET',
  errno: 'ECONNRESET',
  syscall: 'read',
  etc...

onread调用之后没有堆栈跟踪,因此我不清楚如何获得超出ECONNRESET错误代码(-54)的任何其他信息传递给{ net.js中的{1}}方法

每个请求都会出现此问题 - 它不是间歇性的。

一些观察结果:

  • 从Chrome或邮递员发出相同请求时,请求不会失败
  • 尝试使用相同的标头从Chrome重现成功的请求失败
  • 设置接受标头以使用' gzip'等...没有帮助 - 我已经尝试了所有建议,包括一些奇怪的建议,例如设置内容长度并为请求添加主体,尽管这是一个GET请求
    • 错误始终出现在net.js中,但同时发生在请求和axios库

这是有趣的部分 - 我只能在本地托管服务器时可靠地重现此问题。我可以通过docker容器到达dev实例或在vagrant中运行服务器,而不会出现问题。

我正在运行macOS Sierra 10.12.6,如果这有任何区别的话。服务器是用Java编写的,并使用Spring框架。以下是我用于HTTP调用的onread配置:

RestTemplate

我已经尝试过乱搞这些设置而没有运气。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我也有同样的问题。原因在于我的代理设置。我将代理端口 localhost:8080 设为我的 localhost:3000。这就是为什么从我的 NodeJS 应用程序到 localhost:3000 的所有 API 请求都返回“ECONNRESET”错误的原因。当我删除代理端口时,问题就解决了。检查您的网络设置。可能是重定向问题

答案 1 :(得分:1)

这是NodeJS的已知问题,已经解决。有关详细信息,请参阅http.Agent: idle sockets throw unhandled ECONNRESET

另外,请确保在MacOS上opening a port

时启用了正确的安全设置