2010-10-14 63 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

相關問題