2

我正在使用 NodeJS6 和 request-promise 运行 Debian 6。我正在使用 request-promise 来提供网络挂钩。目前,我们每天交付大约 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 确实有效时,连接应该没问题。

4

1 回答 1

2

这可能是很多原因,也许它根本不是节点折叠 ETIMEDOUT 意味着您的服务器没有得到请求的响应

您可以尝试设置超时,例如

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


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

或安装 node-retry ,您的服务器将在需要时自动重新运行

于 2017-05-11T13:49:00.217 回答