node.js process.nextTick错误

我遇到了一些与node.js有关的奇怪事情:

当我尝试使用只有以下代码的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时,我得到了所需的网页。 此外,在networking主机日志中,我可以看到已经有一个成功的连接(如果使用localhost而不是127.0.0.1 ,则不会发生这种情况)。

我说这很有趣,因为如果我把主机更改为谷歌或不是一切正常,它吐出的HTML到控制台。

我应该注意到,我正在运行cygwin下的节点0.4.2,它是从源代码构build的。

任何人看到/处理过这个?

我很确定我已经找出了导致这个错误的原因:

当没有Content-Length HTTP标头时。

有些情况下,这个头被忽略,特别是当Transfer-Encoding: chunked被设置,然后节点播放很好。 然而,对于基本的节点获取,传输编码通常不会被设置为分块,因为托pipe服务器不是stream媒体的东西,但他们通常不设置一个Content-Length头(不pipe这是否符合标准是有问题的, 该标准说 ,除非其他规则禁止这个标题应该被设置,虽然这些都是真实世界的情况下,应该在任何情况下处理)。

我用我自己的本地主机检查了这一点,当我设置一个Content-Length ,节点突然好起来。

正如@dhofstet在评论(和问题)中提到的,他发现了一个也打破了节点的URL:www.cnbc.com/id/41863659/
当他发布这个,我检查,它确实打破了http.get() 。 我现在重新检查了一下,在写这篇文章的时候,URL发出了一个Content-Length头,奇迹的奇迹,节点不再在这个url上崩溃。

如果有人能证实这一点(如果你还没有安装本地主机服务器,不需要太长的时间就可以了),并且用自定义头文件提供一个基本的响应。

您可以使用更新节点

$ sudo n stable

我有这个普通的问题,并通过更新节点解决