node.js页面刷新两次调用资源?

时间:2011-11-27 05:16:28

标签: javascript 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!

2 个答案:

答案 0 :(得分:31)

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

此外,您还可以为request.url添加日志记录。这将显示您正在请求的网址。

答案 1 :(得分: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

,请参阅此副本