2014-05-09 421 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()!如果你不這樣做,你的請求永遠不會發送

相關問題