2014-01-25 26 views
0

我正嘗試使用Connect將顯示Hello World的網頁創建爲中間件,並將其記錄在控制檯中。我已經能夠在我的瀏覽器中使用它,但我注意到控制檯記錄了兩次 - 使用curl時不會這樣做。我沒有收藏圖標,Chrome中的所有擴展程序都已停用。使用Connect/NodeJS時不需要的多個請求

這裏是我的代碼...很簡單:

var connect = require('connect'); 

var app = connect(); 
app.use(function (req, res, next) { 
    console.log('hello world'); 
    res.setHeader('Content-Type', 'text/plain'); 
    res.end('Hello World'); 
}); 
app.listen(5000); 

再次,打開Chrome http://localhost:5000後,這是在終端輸出:

hello world

hello world

爲什麼被稱爲兩次?這是正常的嗎?

回答

0

是的。當有人連接服務器時,它會在服務器上發送消息。

+0

這並不能解釋爲什麼它被調用兩次。我明白當有人連接到服務器時發送請求。 –

1

您收到兩個請求,最有可能是對favicon的chrome檢查。添加console.log(req);並檢查向服務器發出了什麼請求。

app.use(function (req, res, next) { 
    console.log(req); 
    console.log('hello world'); 
    res.setHeader('Content-Type', 'text/plain'); 
    res.end('Hello World'); 
}); 
+0

console.log(req.url)不那麼冗長,應該更容易看到瀏覽器正在請求第二個請求的內容。 –

-1

從文檔:

到Response.End([數據],[編碼])

此方法的信號,所有的響應報頭和主體的已發送所述服務器;該服務器應該認爲此消息已完成。必須在每個響應中調用response.end()方法。

如果數據被指定爲,它等同於調用response.write(data,encoding),接着是response.end()。

最後一行似乎是這個關鍵。你看到你的第一個控制檯日誌,那麼response.write就相當於什麼。對缺乏格式的道歉,我在iPad上。

0

這不正常。如果您只是刷新瀏覽器的頁面(Ctrl + R),則只能看到「hello world」一次。開放開發人員工具在瀏覽器(菜單按鈕 - >工具 - >開發工具)並切換到網絡標籤。然後再次刷新瀏覽器頁面並檢查瀏覽器發送的請求。