如何调试因 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
});
或安装节点重试,您的服务器将在需要时自动重新运行
我正在 运行使用 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
});
或安装节点重试,您的服务器将在需要时自动重新运行