2010-10-14 23 views
16

El siguiente es el servidor web de ejemplo de la documentación, con un contador agregado. Imprime el contador de la consola cada vez que un cliente/navegador solicita la página.Petición de llamada del servidor web Nodejs dos veces cuando se carga la página

Sin embargo, se llama dos veces cuando lo solicita el navegador. ¿Por qué?

Esto es lo que se espera que sucedería:

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

pero esto sucede:

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

que ejecuta el código usando la línea de comandos

$ node example.js 

Aquí está el código :

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

La primera vez que me encontré con este llegué comportamiento similar, pero en posteriores ejecuciones que funciona como se esperaba. –

+0

Quizás es como lo estoy ejecutando. Solo estoy usando la línea de comando 'node example.js'. ¿Cómo lo ejecutas? – Garrows

+0

Lo ejecutó desde la línea de comando como usted –

Respuesta

37

En la programación, cuando está atascado, siempre es útil rastrear el código para comprender mejor lo que está sucediendo. La forma más sencilla de hacer esto es poner más instrucciones de depuración/impresión hasta que pueda ver lo que está pasando.

Cambie la línea sys.puts a:

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

creo que usted encontrará que la segunda solicitud es el navegador solicita el favicon del sitio.

+0

De hecho lo es. Muchas gracias bxjx. – Garrows

+0

@bxjx: Tienes razón, pero como soy novato en nodejs. ¿Cómo debo evitar esto? –

4

Podemos ignorar el número de páginas de actualización debido a favicon con el siguiente fragmento de código:

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

Cuestiones relacionadas