Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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会混淆每个循环的输出_Node.js_Loops_Response - Fatal编程技术网

Node.js会混淆每个循环的输出

Node.js会混淆每个循环的输出,node.js,loops,response,Node.js,Loops,Response,我想知道是否有人能帮助我理解以下行为。如果我在node.js服务器上有一个app.js文件,如下所示: var http = require('http'); var _ = require('underscore'); http.createServer(function(request, response) { var x = ''; _.each([1, 2, 3], function(num){ x +=" underscore.js says " + num; });

我想知道是否有人能帮助我理解以下行为。如果我在node.js服务器上有一个app.js文件,如下所示:

var http = require('http');
var _ = require('underscore');

http.createServer(function(request, response) {
var x = '';
    _.each([1, 2, 3], function(num){
    x +=" underscore.js says " + num;
});
    response.writeHead(200, {
        'Content-Type': 'text/html'
    })

    response.end(x);

      }).listen(3000, null);
然后每次我请求页面时,我都会看到文本“underline.js say x”3次。我希望这样,因为循环中有3个数字,每个请求都会重置x。但是,如果我有以下内容(x移动到createServer回调之外):

第一次加载产生3个结果(正如预期的那样),但后续请求总是附加循环两次(因此6“underline.js表示x”行。我可以理解它每次都会附加到同一个变量,但我希望它每次都能以3的倍数打印结果,所以第一次调用总共打印3行,第二次打印6行,第三次打印9行等等

我是node.js的新手,如果有人能解释一下这种行为,或者这个循环是如何以我意想不到的方式工作的,我将不胜感激


谢谢

这可能是一个令人失望的答案,但仍然是

您的浏览器将向
/favicon.ico
发出HTTP请求,该请求将命中您的脚本,并为每个请求向
x
变量添加额外的3行

  • 您刷新页面并看到3行
  • 您的浏览器请求
    /favicon.ico
    ,并添加了3行附加内容
  • 刷新页面后,会看到6行加上3行
  • 您的浏览器请求
    /favicon.ico
    ,并添加了3行附加内容
  • ……等等

    您可以通过检查
    request.url
    参数以
    favicon.ico
    结尾来解决此问题

    if (/\/favicon.ico$/.test(request.url)) {
        // don't incremement
    }
    
    …或者你可以用


    这听起来很合理,但它仍然不能解释为什么循环在第一次请求时只显示3个结果。当然/favicon.ico请求也应该被触发吗?@TommyBs:不,因为对
    /favicon.ico
    的请求是在您看到的实际页面的HTTP请求完成之后发生的。是的,看起来您是正确的。我知道你的意思是现在的favicon。理论上,它是在第一次请求favicon时添加的,但没有显示,因为它没有再次访问服务器。我做了一个“request.url”的console.log它证实了你的怀疑。谢谢你的快速回复。我想除了检查请求之外,没有别的办法了。当然没问题!只是学习而已
    if (/\/favicon.ico$/.test(request.url)) {
        // don't incremement
    }
    
    if (require('url').parse(request.url).pathname === '/favicon.ico') {
        // don't incremement.
    }