2014-05-09 422 views
3

我运行node myserver.js包含代码波纹管,并在40-50sec后我得到错误(在代码下面)。什么都没有发生时为什么会出现错误?NodeJs错误:连接ETIMEDOUT

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)}); 



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

这也发生在服务器拒绝你的请求时。如果你请求服务器的许多请求,他们可能会阻止你一段时间后,会导致此错误。 –

回答

4

我认为错在这里至少两件事情:

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

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

+0

但我从来没有称此功能?我不明白它何时触发,您对数字2是否正确。您可以提供1的代码片段吗? – gumenimeda

+0

假设你确实有'post_data',你可以做'subscribeRequest.end(post_data);'。这将发送您的表单数据并发出请求结束的信号。然后你应该从服务器得到某种回应。 – mscdex

+0

@mscdex 我正在使用快递js和邮戳smtp服务做日历事件 虽然我已经声明res.end()和错误,但我得到的是 {[Error:connect ETIMEDOUT 50.31 .225.155:2525] 代码: 'ECONNECTION', 错误号: 'ETIMEDOUT', 系统调用: '连接', 地址:'50 .31.225.155' , 端口:2525, 命令: 'CONN' } –

0

你必须声明你的请求后,呼叫subscribeRequest.end()!如果你不这样做,你的请求永远不会发送

相关问题