基本Node.js的例子不适用于Windows 7

我从http://nodejs.org/#download,v0.6.6安装了node.js。 我正在使用Windows 7 32位。

我在网上经历了各种各样的尝试,并且想在这样做的时候进行实验,但是我似乎无法获得node.js的工作。 节点将运行我的.js文件,但是来自浏览器的任何请求超时。

下面是一个典型的Hello World示例,它不起作用:

var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337); 

指向我的浏览器在127.0.0.1:1337或localhost:1337不起作用。 来自浏览器的请求超时。 我也试过听(1337,'0.0.0.0')和听(1337,'127.0.0.1')。

我知道服务器正在运行; 如果我CTRL + C并停止节点,浏览器会立即返回ERR_CONNECTION_RESET。

我也尝试在这个要点运行代码,这将无法正常工作: https : //gist.github.com/1339846 。 我结束控制台输出“听!” 然后没有别的。

此外,我尝试了不同的端口,我的防火墙closures

 netsh firewall set opmode mode=disable 

我试着用完全禁用的防火墙,并停止服务。 如果我使用netstat -noa检查连接,我可以看到节点为浏览器打开了一堆连接,所有连接都处于CLOSE_WAIT状态。 所以它看起来像连接正在发生,但node.js只是不工作。

应该由请求启动的callback函数永远不会执行 – 我在各个区域中分配了一些console.log语句,除了callback函数外,它们都执行。

我卸载,重新安装,尝试了几个以前的版本,重新启动我的机器…什么都没有。

任何帮助表示赞赏!

更新:我刚刚放弃。 我试过了我能想到的所有东西,最后在VirtualBox的Ubuntu实例中运行node.js更容易,而不是抓住吸pipe。

Solutions Collecting From Web of "基本Node.js的例子不适用于Windows 7"

!!!!!! 同样的问题发生在我身上….

这里有一个解决方案,我还没有找到任何地方:

Windows Firewall with Advanced Security查看,看看Evented I/O for V8 JavaScript被阻塞或出现两次。

如果是这样的解锁,并删除重复的条目。 如果你安装/卸载/安装nodeJs,将会有2个条目。

另外,当节点第一次运行“窗口防火墙”对话框时,会打开询问是否要允许节点具有防火墙访问权限 如果您按“否”或者不关闭窗口,就会Evented I/O for V8 JavaScript创建Evented I/O for V8 JavaScript和IT将被阻止。

我只是试了一下,它对我有用。 确保你的防火墙没有阻塞节点。

我正在使用Windows 7 32位。

你使用的是什么版本的Windows 7? 例如。 家庭高级版,专业版,旗舰版?

npm github项目中的一个线程在使用npm安装nodejs模块时提到了类似的症状,并且注释似乎将其缩小到由Windows 7 Professional引起。 它是32/64位似乎并不重要。

我遇到了你描述的问题,以及npm安装问题,并在Windows 7 Professional 64位上运行。

使用XPMode (在npm线程中提到的解决方法)使我能够解决这两个问题。 虽然,我想这只是在VirtualBox中使用Ubuntu的更多Windows版本。

其他解决方法尝试没有成功:

  • 制作/运行v0.6.6的Debug版本
  • 创建/运行v0.6.5的Debug版本(实际上在启动时崩溃)
  • 在安装的node.exe上设置各种兼容性模式
  • 预先打包的Windows安装程序v0.6.5

我遇到了同样的问题,在阅读完文档后,我意外地碰到了我认为是解决方案的东西。 在我的例子中,我注意到传入的请求被传递给节点,但是响应从来没有触发“结束”事件。 因此,在Windows中更改传入的防火墙规则似乎并没有涉及到这个问题。

所以,http.createserver接受一个参数 – 一个包含请求和响应参数的函数。 请求参数似乎是问题所在。 请求参数是http.incomingMessage的一个实例。 这个类只有一个事件类型,但它本身也是Stream.Readable的一个实现,在这里我找到了未触发的“end”事件。 真的没有其他理由,只是测试哪个是第一个没有触发的事件,我只是添加了另一种类型的事件(“可读”)的侦听器,只添加了一个console.log行,使整个事情工作。

所以代码看起来像这样:

 var http = require("http"); http.createserver(function (request, response) { console.log('request'); request.on('readable', function(){ console.log('request readable'); }); request.on("end", function () { console.log('request end'); response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('Hello HTTP!'); }); }).listen(8080); 

上面的代码工作,而没有“可读”事件侦听器的下面的早期版本不会回应:

 var http = require("http"); http.createserver(function (request, response) { console.log('request'); request.on("end", function () { console.log('request end'); response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('Hello HTTP!'); }); }).listen(8080); 

我不知道为什么这个工程,除了在文件中的一点线索,内容如下:

在某些情况下,侦听“可读”事件将导致一些数据从底层系统读入内部缓冲区(如果尚未存在的话)。

  1. 转到“控制面板\所有控制面板项目\ Windows防火墙\允许的程序”
  2. 点击允许程序
  3. 从列表中选择nodejs。

这为我解决了所有的问题

我与这个代码有相同的问题(Http server示例从这个链接: http : //net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/ )

 var http = require("http"); http.createserver(function (request, response) { request.on("end", function () { response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('Hello HTTP!'); }); }).listen(8080); 

我试过Windows 7的64位版本,Windows XP的虚拟机,Ubuntu的虚拟机…什么都没有! 它只有在我评论了“request.on”这一行之后才起作用。 你的例子(没有这条线)为我工作得很好。 我正在使用node.js(v0.10.18 for windows或linux)的最新稳定版本。 希望这可以帮助任何人有这个麻烦。