2010-10-14 11 views
16

Aşağıdaki örnek, eklenmiş bir sayaç ile belgelerin web sunucusudur. Bir istemci/tarayıcı sayfayı istediğinde sayacı konsola yazdırır. Ancak, tarayıcı tarafından talep edildiğinde iki kez çağrılmaktadır. Niye ya? Nodejs web sunucusu çağrı isteği Sayfa yüklendiğinde iki kezListener

Bu

ben olacağını ne beklenir:

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

ama bu olur:

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

Ben kodu komut satırını İşte

$ node example.js 

kullanılarak kod çalıştırmasına :

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

Ben benzer davranışlar var bu koştu, ama ilk kez sonraki pistlerinde çalışır beklenildiği gibi. –

+0

Belki de onu nasıl çalıştırıyorum. Sadece 'node example.js' komut satırını kullanıyorum. Nasıl çalıştırıyorsun? – Garrows

+0

Bunu sizin gibi komut satırından değiştirirsiniz –

cevap

37

Programlamada, takıldığında, ne olduğunu daha iyi anlamak için kodu izlemek her zaman kullanışlıdır. Bunu yapmanın en kolay yolu, neler olduğunu görene kadar daha fazla hata ayıklama/baskı ifadesi koymaktır.

Değişim sys.puts hat için:

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

Sana 2 istek sitenin favicon talebinde tarayıcı olduğunu göreceksiniz düşünüyorum.

Aşağıdaki kod parçası ile favicon nedeniyle sayfa yenileme sayısı göz ardı edebilirsiniz
+0

Gerçekten de öyle. Çok teşekkür ederim bxjx. – Garrows

+0

@bxjx: Haklısın ama nodejs için acemi olduğum için. Bundan nasıl kaçmalıyım? –

4

:

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