2011-11-27 13 views
10

Mam podstawową konfigurację węzła node.js, ale myślę, że czegoś brakuje.strona node.js odświeża zasoby połączeń dwa razy?

My main.js:

var a = require('./another.js'); 

var http = require('http'); 
http.createServer(function (request, response) { 
    response.writeHead(200, 
    { 
     'Content-Type': 'text/html' 
    }); 

    response.write(a.saysomething('Hi there!') + '<br />'); 
    response.end(); 
}).listen(27182); 

console.log('Server running at http://127.0.0.1:27182/'); 

My another.js:

exports.saysomething = function (str) { 
    console.log('in saysomething!'); 
    return str + ' hey there!'; 
} 

Kwestia jest taka, że ​​moja konsola jest wyprowadzanie in saysomething! dwukrotnie. Czy czegoś brakuje? Kiedy odświeżam stronę, oczekuję tylko jednego in saysomething!.

+0

Czy strona zawiera coś innego niż tekst? Jakieś obrazy lub coś z tym atrybutem SRC? – JohnP

+0

Nie. To, co napisałem, jest zgodne z prawem. Moje wyniki to 'Cześć! No hej!
' – JesseBuesking

+0

Sprawdź swoje wtyczki do Chrome - miałem wtyczkę sniffer, która robiła drugie żądanie http, każde żądanie! –

Odpowiedz

30

Twoja przeglądarka najprawdopodobniej próbuje uzyskać favicon.ico oprócz adresu URL, który uderzasz. Spróbuj po prostu wykonać polecenie w linii poleceń: curl http://127.0.0.1:27182/

Możesz również dodać rejestrowanie dla request.url. Dzięki temu dowiesz się, które adresy URL są wymagane.

+0

Czy to naprawdę ponowne żądanie całej strony tylko dla favicon? – JesseBuesking

+3

To ponownie żąda /favicon.ico. Twój kod węzłowy odpowie na dowolny adres URL, w tym/OHMYGODTHISISAURLTOO :) –

+0

Czy istnieje sposób, aby zignorować trasę w pliku node.js? Wiem, że możesz to zrobić w asp.net mvc. – JesseBuesking

0

Oto kolejny sposób na zrozumienie problemu. Ten serwer węzłowy będzie śledzić wszystkie żądania i wyświetlać je w przeglądarce w JSON. Następnie możesz nacisnąć F5 i oglądać otrzymywane zapytania.

var http = require("http"); 

    var messages = []; 

    http.createServer(function(request, response) { 
     console.log("We got a hit @ " + new Date());   
     messages.push(request.url); 
     messages.push(request.headers); 

      response.writeHead(200, {"Content-Type": "text/plain"}); 
     for (var i = 0; i < messages.length; ++i) { 
      response.write("\n\n" + JSON.stringify(messages[i])); 
     } 
      response.end(); 
    }).listen(8888); 

PS: Zobacz też ten duplikat, aby uzyskać więcej informacji nodejs - http.createServer seems to call twice

Powiązane problemy