Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs-http.createServer似乎调用了两次_Node.js - Fatal编程技术网

Node.js nodejs-http.createServer似乎调用了两次

Node.js nodejs-http.createServer似乎调用了两次,node.js,Node.js,如果我在节点中编写以下程序: http.createServer(function (req, res) { if( req.method == 'GET' ) { var body = ''; req.on('data', function(data) { body += data }); req.on('end', function() { console.log('request ended') }); }

如果我在节点中编写以下程序:

  http.createServer(function (req, res) {

    if( req.method == 'GET' ) {
      var body = ''; req.on('data', function(data) { body += data });
      req.on('end',  function() {
        console.log('request ended')
      });
    }

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('142\n');
  }).listen(3500);

然后用
http://xxx.xx.xxx.xx:35010
我在我的控制台上看到一个
请求结束了两次
——我不确定为什么一个HTTP请求会导致该请求执行两次。

这很正常——您的浏览器会进行多个调用

例如,大多数浏览器都会调用grab
/favicon.ico

尝试记录url:

console.log(req.url);

您将看到所调用的内容。

通常,
favicon.ico
由浏览器获取。所以,这两个电话

此问题的解决方案可以是检查请求URL是否正在获取
favicon.ico

http.createServer(function (req, res) {
    if (req.url != '/favicon.ico') {
        // do your stuffs
    }
}).listen(3500);

另一件需要注意的事情是,现代浏览器可能会预取或预加载页面。Chrome有时甚至会在你点击地址栏的enter键之前完成这项操作

它可以在“隐私和安全”下禁用,但这将影响所有浏览

您还可以检查并仅返回一个错误。(我不确定官方的回应应该是什么。)


这种情况不太可能经常发生,但如果您正在测试一个API,那么突然发出一个意外请求充其量是令人恼火的,甚至是更危险的。

如果一个问题是重复的,那么@Jessemon的可能重复,投票以重复的方式结束,而不是编辑问题。这可能很愚蠢,但回答的确切原因是什么。如果添加,则写入(“Hi”)不会显示两次?每个查询只显示一次。favicon请求get is and discard it has it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’s it’,但是我不理解favicon链接的答案:在第二次调用中,我在“req.url”中找到了与第一次调用相同的路径。当我推断出节点服务器时,这个bug就变得很烦人,因为我正在两个线程之间进行杂耍,这两个线程并行地做相同的事情。