2010-10-14 8 views
16

Poniżej znajduje się przykład serwera WWW z dokumentacji, z dodatkowym licznikiem. Drukuje licznik do konsoli, gdy klient/przeglądarka żąda strony.Serwer Nodejs wywołujący requestListener serwera dwa razy po załadowaniu strony

Jednak jest wywoływana dwa razy na żądanie przeglądarki. Czemu?

To co by się spodziewać by się stało:

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

ale to się dzieje:

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

uruchomić kod za pomocą wiersza polecenia

$ node example.js 

Oto kod :

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

Po raz pierwszy wpadłem to mam podobny problem, ale na kolejnych przebiegów to działa zgodnie z oczekiwaniami. –

+0

Być może to, jak ja go używam. Używam tylko wiersza poleceń "node example.js". Jak to działa? – Garrows

+0

Zrobiłem to z linii poleceń, tak jak ty –

Odpowiedz

37

W programowaniu, gdy utkniesz, zawsze jest przydatne śledzenie kodu, aby lepiej zrozumieć, co się dzieje. Najłatwiej to zrobić, dodając więcej instrukcji debug/print, dopóki nie zobaczysz, co się dzieje.

zmienić linię do sys.puts:

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

myślę, przekonasz się, że 2nd prośba jest przeglądarka zainteresowanie favicon na miejscu.

+0

Rzeczywiście tak jest. Dziękuję bardzo bxjx. – Garrows

+0

@bxjx: Masz rację, ale ponieważ jestem nowicjuszem dla nodejs. Jak powinienem tego unikać? –

4

możemy ignorować Odśwież stronę rachubę z powodu favicon z poniższym fragmencie kodu:

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

Powiązane problemy