2013-08-20 3 views
5

mio codice sorgente:Contare i visitatori in un server http nodo

var http = require("http"); 
var count=1; 

http.createServer(function(request, response) { 
response.writeHead(200, {"Content-Type": "text/plain"});  
response.write("Hi, you are number "+count+" visitors"); 
response.end(); 
count++; 
    }).listen(8888); 

ho ottenuto 1,3,5,7, ..... in ogni visita. Perché incrementare il conteggio di 2?

risposta

8

La richiesta a favicon.ico sta attivando una richiesta aggiuntiva (l'ho confermata registrando i dettagli per ogni richiesta e quindi facendo una richiesta normale con Chrome).

Sarà necessario cercare esplicitamente il tipo di richiesta (url, metodo, ecc.) Che si desidera abbinare.

Inoltre, tieni presente che se il tuo server muore, probabilmente a un certo punto il tuo conto verrà resettato. Se non lo vuoi, dovresti mantenerlo da qualche parte meno volatile, come un database.

+0

Il tipo di richiesta? Io uso semplicemente localhost: 8888 in un browser. Quando resetto il server, inizia da 1,3,5, ... tutto da capo. – user1780176

+0

@ user1780176 Voglio dire esaminare le informazioni della richiesta, come l'URL. Non intendevo il tipo come in 'GET',' POST', ecc. – alex

+0

La mia comprensione è che l'evento viene attivato e quindi il comando viene eseguito. Il ciclo degli eventi viene eseguito una sola volta. Destra? – user1780176

0

Se il proprio server è solo un semplice contatore e sapendo che la richiesta di favicon.ico attiva una richiesta aggiuntiva, è possibile conteggiare ogni richiesta a metà, in modo da ottenere il numero esatto di visite.

counter = counter + 0.5; 
+4

Questo è piuttosto fragile, non puoi garantire che ogni richiesta tenti di prendere anche 'favicon.ico'. – alex

0

Si potrebbe ignorare la richiesta di favicon.ico:

var server = http.createServer(function (req, res) { 
    if(req.url === '/favicon.ico'){ 
     console.log('favicon'); 
     return; 
    } 
    userCount++; 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('Hello!\n'); 
    res.write('We have had ' + userCount + ' visits!\n'); 
    res.end(); 

});