Node.js会混淆每个循环的输出
我想知道是否有人能帮助我理解以下行为。如果我在node.js服务器上有一个app.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; });
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行
/favicon.ico
,并添加了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.
}