【问题标题】:NodeJs Error: connect ETIMEDOUTNodeJs 错误:连接 ETIMEDOUT
【发布时间】:2018-08-07 14:00:31
【问题描述】:

我运行包含以下代码的node myserver.js,40-50 秒后我收到错误(代码以下)。为什么没有发生任何事情时我会收到错误消息?

var options = {
    host: 'google.com',
    port: '80',
    path: '/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': 'post_data.length'
    }
 };

 var subscribeRequest = require('http').request(options, function(res) {
    console.log('send request');
 }).on('error', function(err){console.log(err.stack)});

40-50 秒后出现此错误:

Error: connect ETIMEDOUT
    at errnoException (net.js:904:11)
    at Object.afterConnect [as oncomplete] (net.js:895:19)

【问题讨论】:

  • 服务器拒绝您的请求时也会发生这种情况。如果你例如向服务器发出许多请求,它们可能会在一段时间后阻止您并导致此错误。

标签: node.js http


【解决方案1】:

我在这里看到至少有两件事是错误的:

  1. 您没有结束您的请求。当您使用http.request() 时,您必须在发送完任何数据后返回的请求对象上调用.end(),以便服务器知道没有更多数据到来。 http.get() 会自动为您调用 .end(),因为没有带有 GET 请求的主体。

  2. 'Content-Length': 'post_data.length' 应该是'Content-Length': post_data.length

【讨论】:

  • 但是我从来没有调用过这个函数?我不明白它什么时候触发,你对数字 2 的看法是对的。你能提供 1 的代码 sn-p 吗?
  • 假设你确实有post_data,你会做subscribeRequest.end(post_data);。这将发送您的表单数据并发出您的请求结束的信号。然后你应该从服务器得到某种响应。
  • @mscdex 我正在使用 express js 和邮戳 smtp 服务进行日历事件即使我已经声明 res.end() 并且我得到的错误是 {[Error :connect ETIMEDOUT 50.31.225.155:2525] 代码:'ECONNECTION',errno:'ETIMEDOUT',系统调用:'connect',地址:'50.31.225.155',端口:2525,命令:'CONN'}
【解决方案2】:

您必须在声明您的请求后致电subscribeRequest.end()!如果你不这样做,你的请求将永远不会被发送

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 2019-01-06
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2019-12-24
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多