2011-11-27 64 views
10

我有一个基本的node.js设置,但我想我错过了一些东西。node.js页面刷新调用资源两次?

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/'); 

another.js

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

的问题是,我的控制台输出in saysomething!两次。我错过了什么吗?当我刷新页面时,我预计只有一个in saysomething!

+0

您的网页是否包含非文本什么?任何图像或任何具有SRC属性的内容? – JohnP

+0

不是。我发布的内容完全是我拥有的。我的输出是“你好!嘿!
' – JesseBuesking

+0

检查您的Chrome插件 - 我有一个嗅探器插件正在制作第二个http请求,每个请求! –

回答

30

除了您正在浏览的网址之外,您的浏览器可能会尝试获取favicon.ico。尝试在命令行上执行该命令:curl http://127.0.0.1:27182/

另外,您可以为request.url添加日志记录。这会告诉你哪些网址正在被请求。

+0

它是否真的重新请求整个页面仅用于图标? – JesseBuesking

+3

它重新请求/favicon.ico。您的节点代码将响应任何网址,包括/ OHMYGODTHISISAURLTOO :) –

+0

有没有办法在node.js中忽略路由?我知道你可以在asp.net mvc中做到这一点。 – JesseBuesking

0

这是另一种理解问题的方法。此节点服务器将跟踪所有请求,并在JSON中以浏览器的形式显示给您。然后你可以打F5看你正在制作的请求。

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:另见本复制更多信息nodejs - http.createServer seems to call twice