2011-03-13 64 views
16

我遇到了Node.js的一些奇怪的事情:Node.js的process.nextTick錯誤

當我嘗試使用HTTP客戶端,只有下面的代碼:

require('http').get({host:'127.0.0.1',port:9000, path:'/'}, function(res){ 
    var data = ''; 
    res.setEncoding('utf8'); 
    res.on('data', function(chunk){ 
     data += chunk; 
    }); 
    res.on('end', function(){ 
     console.log(data); 
    }); 
}); 

將引發錯誤:

node.js:116 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^TypeError: Cannot call method 'emit' of undefined 
    at Socket.<anonymous> (http.js:1174:9) 
    at Socket.emit (events.js:42:17) 
    at Array.<anonymous> (net.js:799:27) 
    at EventEmitter._tickCallback (node.js:108:26) 

當我瀏覽到127.0.0.1:9000在瀏覽器中,我得到了想要的網頁。此外,在網絡主機日誌中,我可以看到有成功的連接(如果使用localhost而不是127.0.0.1,則不會發生這種情況)。

我說這很有趣,因爲如果我更改主機爲谷歌或whatnot一切工作正常,它吐出html到控制檯。

我應該注意到,我正在運行cygwin下的節點0.4.2,它是從源代碼構建的。

任何人看到/處理此之前?

+0

我今天遇到了同樣的問題節點(與節點0.4.2解決了節點在Arch Linux上),當試圖獲取cnbc.com網址的內容時,雖然不幸我不知道如何解決它(還沒有)... – dhofstet 2011-03-13 16:31:47

+0

@dhofstet,這是否與你一致?你能定義一個可重複使用的情況嗎?在正常情況下出現故障的情況下,您是否注意到任何不同情況?這是如此令人沮喪 – davin 2011-03-13 18:03:02

+0

我開了票呢:https://github.com/joyent/node/issues/784 – dhofstet 2011-03-14 16:35:53

回答

8

我敢肯定,我已經想通了是什麼原因導致這個錯誤:

When there is no Content-Length HTTP header.

有一些情況,這頭被忽略,特別是當Transfer-Encoding: chunked設置,然後節點發揮不錯。然而,對於基本與節點獲取,傳輸編碼通常不會設置爲分塊因爲託管服務器不流的東西,但他們往往沒有設置Content-Length頭(這是否是標準的達標是有問題的,這the standard says除非其他規則禁止,否則應設置此標頭,儘管這些都是現實世界中應該在任何情況下處理的情況)。

我用自己的本地主機檢查了這個,當我設置Content-Length時,節點突然變得很好。

正如在評論中提到(在這個問題),他發現了一個URL,它也打破節點@dhofstet:www.cnbc.com/id/41863659/
當他張貼了這個,我查了一下,才確實打破了http.get()。 我現在複查,並在寫URL的時間,現在確實發出Content-Length頭和奇蹟中的奇蹟,節點不再崩潰在該網址上。

如果有人可以證實這一點(不應該花太長時間來設置本地主機服務器,如果你還沒有一個,並用自定義標題發出基本的響應)。

+1

聽起來這個答案。如果沒有,請嘗試使用[Mikeal的請求庫](https:// github。com/mikeal/request),因爲它可以最大限度地減少你可能犯的錯誤(或者提出錯誤)。另外,請停止進入[#node.js](http://webchat.freenode.net/?channels=node.js&uio=d4),並提出問題以獲得更快的響應:)確保使用您的調查結果進行報告。 – DTrejo 2011-03-30 05:50:32

+0

我在節點v0.3.7中遇到同樣的問題,但問題一旦升級到0.4.7就消失了 – Jayesh 2011-05-04 04:00:00

1

您可以更新使用

$ sudo的ň穩定

我有這樣的問題,普遍的,並且得到通過更新