2010-10-14 47 views
16

Sau đây là máy chủ web ví dụ từ tài liệu, với bộ đếm bổ sung. Nó in truy cập vào bàn điều khiển bất cứ khi nào một khách hàng/trình duyệt yêu cầu trang.Yêu cầu gọi điện cho máy chủ web Nodejs yêu cầu hai lần khi trang được tải

Tuy nhiên, nó được gọi hai lần khi được trình duyệt yêu cầu. Tại sao?

Đây là những gì tôi mong đợi sẽ xảy ra:

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

nhưng điều này sẽ xảy ra:

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

tôi chạy mã bằng cách sử dụng dòng lệnh

$ node example.js 

Dưới đây là đoạn code :

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

Lần đầu tiên tôi chạy này, tôi có hành vi tương tự, nhưng trên chạy tiếp theo nó hoạt động như mong đợi. –

+0

Có lẽ nó như thế nào tôi đang chạy nó. Tôi chỉ sử dụng dòng lệnh 'node example.js'. Làm thế nào để bạn chạy nó? – Garrows

+0

Chạy nó từ dòng lệnh như bạn –

Trả lời

37

Trong lập trình, khi bị kẹt, luôn luôn có ích để theo dõi mã để hiểu rõ hơn những gì đang xảy ra. Cách dễ nhất để làm điều này là đưa thêm các câu lệnh debug/print vào cho đến khi bạn có thể thấy những gì đang xảy ra.

Thay đổi sys.puts dòng:

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

Tôi nghĩ rằng bạn sẽ thấy rằng các yêu cầu thứ 2 là trình duyệt yêu cầu favicon cho trang web.

+0

Thật vậy. Cảm ơn bạn rất nhiều bxjx. – Garrows

+0

@bxjx: Bạn nói đúng nhưng kể từ khi tôi mới làm quen với nodejs. Làm thế nào tôi nên tránh điều này? –

4

Chúng ta có thể bỏ qua những trang làm mới đếm do favicon với đoạn mã sau:

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

Ref: https://gist.github.com/763822

Các vấn đề liên quan