2010-10-14 38 views
16

以下是文档中的示例Web服务器,并添加了一个计数器。当客户端/浏览器请求页面时,它将计数器打印到控制台。当页面加载时,Nodejs Web服务器调用requestListener两次

但是,浏览器请求时会调用两次。为什么?

这是我所期待会发生:

browser : Hello World 1 
console : Counter 1 
[reload page] 
browser : Hello World 2 
console : Counter 2 

,但出现这种情况:

browser : Hello World 1 
console : Counter 1 
      Counter 2 
[reload page] 
browser : Hello World 3 
console : Counter 3 
      Counter 4 

我使用命令行

$ node example.js 

这里是代码运行代码:

var 
    http = require('http'), 
    counter = 0, 
    sys = require('util'); 
    http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    counter++; 
    res.end('Hello World ' + counter + '\n'); 
    sys.puts('Counter ' + counter); 
    }).listen(8000, ""); 
+0

我第一次跑这我有类似的行为,但在随后的运行它的工作原理如预期。 – 2010-10-15 00:56:03

+0

也许它是我如何运行它。我只是使用命令行'node example.js'。你如何运行它? – Garrows 2010-10-15 01:04:00

+0

像你这样的命令行吧 – 2010-10-15 01:23:36

回答

37

在编程中,当卡住时,跟踪代码以便更好地理解发生的事情总是很方便。执行此操作的最简单方法是放入更多调试/打印语句,直到您可以看到发生了什么。

更改sys.puts行:

sys.puts('Counter ' + counter + " from " + req.url); 

我想你会发现,第二个请求是请求站点的图标浏览器。

+0

确实如此。非常感谢bxjx。 – Garrows 2010-10-15 03:54:55

+0

@bxjx:你是对的,但因为我是nodejs的新手。我应该如何避免这种情况? – 2013-10-18 07:20:06

4

我们可以忽略由于与下面的代码片段的favicon页面刷新次数:

if (request.url === '/favicon.ico') { 
    response.writeHead(200, {'Content-Type': 'image/x-icon'}); 
    response.end(); 
    console.log('favicon requested'); 
    return; 
} 

编号:https://gist.github.com/763822

相关问题