来自node.js新手的一些问题

时间:2011-09-14 01:46:10

标签: node.js

我刚刚开始学习节点,我在Fedora 12上使用node-v0.4.11。它安装时没有任何错误,我可以运行一些基本程序,但有些东西我无法弄清楚

  

如果我在端口创建服务器,然后使用 Ctrl + C 停止节点   我不能再次使用该端口启动服务器而不重新启动   系统。

我的代码看起来像这样

var port=8080;
var count=0;
var http=require('http');
var server = http.createServer(function(req, res) {
  count++;
  console.log('request no '+count+' received');
  res.writeHead(200);
  res.end('you are at port '+port);
  });
server.listen(port);
console.log('server started at port '+port);

现在,当我保存文件并执行它时,服务器启动。但是当我从shell停止服务器时,我无法在我之前启动的端口再次启动服务器(在这种情况下端口 8080 )。这很糟糕,因为每次我必须对其进行更改文件我也要更改端口号。我可以停止这种行为吗?

修改

这是我尝试再次在同一端口启动服务器时出现的错误

Server started at 8080

node.js:203
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: listen EADDRINUSE
    at errnoException (net_uv.js:557:11)
    at Array.<anonymous> (net_uv.js:632:28)
    at EventEmitter._tickCallback (node.js:195:26)

我在使用node终止Ctrl+C之后看到了进程列表,我发现节点仍在运行。所以我杀了它并再次检查进程列表以确保它已经死了它是(我在进程列表中看不到它)。现在我再次尝试在同一端口启动服务器,但我得到了与上面相同的错误。一旦我停止服务器并从浏览器发出请求,请求就会挂起(它一直在等待)。


  

我的下一个问题是,在上面的服务器启动和我做的时候   第一个请求count增加3次,我可以看到3   控制台上的消息。如果我做的话,这仅适用于第一个请求   更多请求count只增加一次。怎么了?

     

此问题已解决


  

我的下一个问题是,如果我将res.writeHead(200);更改为   res.writeHead(404);或任何其他有效状态代码,例如300节点   在命令行中给出错误,但这些是有效的状态代码和   服务器应该启动并响应每个请求   Not found的状态代码,例如404。我做错了什么?

     

此问题已解决


  

我无法使用Firebug的'Net'标签来监控请求   将请求发送到Node创建的服务器。有办法吗?

感谢承担。

1 个答案:

答案 0 :(得分:4)

  

我无法在我开始之前的端口再次启动服务器

你不应该看到这种行为,我无法重现它。当您尝试再次启动服务器时是否收到错误消息?它是什么?停止服务器后,您是否在进程列表中看到任何node进程?如果是这样,您可以在杀死它们后启动服务器吗?


  

count增加3次,我可以在控制台看到3条消息

您的浏览器正在发送多个请求。例如,在Chrome中,您可能会收到(1)预取请求(Chrome下载认为所需的页面),(2)实际页面请求,以及(3)请求favicon.ico;您的节点应用正在侦听所有请求,而不仅仅是对/网址的请求。在初始请求之后,浏览器缓存favicon等,并且不需要再次请求它们。

尝试将console.log(req.url);添加到您的回调中,并查看浏览器要求的网址。


  

任何其他有效状态代码(如300节点)在命令行中都会出错

我无法重现这个问题。你收到什么错误?


  

当我向Node创建的服务器发送请求时,我无法使用Firebug的“Net”选项卡来监控请求

我也无法重现这一点。 Firebug和其他客户端调试工具不知道或不关心服务器上运行的是什么技术;它只是说HTTP。