如何调试因 ETIMEDOUT 而失败的请求承诺

How to debug request-promise which fail with ETIMEDOUT

我正在 运行使用 NodeJS6 和请求承诺来安装 Debian 6。 我正在使用请求承诺来提供网络挂钩。目前,我们每天提供大约 2+M 个网络挂钩。

大多数情况下 运行 一切正常,但在某些情况下 HTTP 请求根本无法传送。

这是我的简单代码:

requestPromise({ url: 'https://change-iot-request/do', auth: { user: "switch", pass: "my-password" }, method: "GET", timeout: 15000, rejectUnauthorized: false})
.catch(function(err) {
    console.log(err);
});

有时端点根本收不到任何东西。 我已经尝试 运行 tshark 来查看包是否通过 - 任何服务器上都没有。

如果发生 运行 使用相同参数的 curl 命令,请求就会通过。

如果我重新启动 NodeJS,它会再次开始正确传送。

这是错误输出:

{"name":"RequestError","message":"Error: ETIMEDOUT","cause":{"code":"ETIMEDOUT","connect":true},"error":{"code":"ETIMEDOUT","connect":true}

怎么办?

尤其是当 curl 正常工作时,连接应该没问题。

可能有很多原因,也许根本就不是node fold ETIMEDOUT 表示您的服务器没有收到请求的响应

你可以尝试设置一个超时时间,比如

var rp = require('request-promise');


var reqPromise = rp({
    method: 'get',
    uri: 'http://localhost:8080/test-connection-length',
    timeout: 600000, // 10 min.
    resolveWithFullResponse: true
});

或安装节点重试,您的服务器将在需要时自动重新运行