4
我想知道是否有人可以帮助我理解以下行为。如果我有一个的node.js服务器上的文件app.js如下面:Node.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);
然后每次我请求的页面,我看到文本“underscore.js说X”的3倍。我期待这个,因为循环中有3个数字,每个请求都重置x。然而,如果我有以下(X移动外回调createServer的):
var http = require('http');
var _ = require('underscore');
var x = ''; // Note x is moved outside the createserver callback
http.createServer(function(request, response) {
_.each([1, 2, 3], function(num){
x +=" underscore.js says " + num;
});
response.writeHead(200, {
'Content-Type': 'text/html'
})
response.end(x);
}).listen(3000, null);
第一负载产生3次的结果(如预期),但后续请求总是追加环路的两倍(所以6“underscore.js我会理解它每次都添加到同一个变量中,但是我希望它每次都以3的倍数打印结果,所以第一次打印总共打印3行,第二次打印6,第三次打印9等
我对node.js很新,所以如果有人能解释这种行为或如何循环以我不会期望的方式工作,将不胜感激
谢谢
这听起来合理做更害怕,随手,但它仍然没有解释为什么仅环显示了前3个结果请求。当然也应该解雇/favicon.ico请求? – TommyBs 2012-07-06 13:08:54
@TommyBs:不,因为对于你看到的实际页面的HTTP请求已经完成,对'/ favicon.ico'的请求发生。 – Matt 2012-07-06 13:10:44
是的,它看起来像你是正确的。我现在明白你对favicon的意思。在理论上,第一个请求添加了favicon,但没有显示,因为它没有再次打到服务器。我做了一个“request.url”的console.log文件,它证实了你的怀疑。感谢您及时的回复。我想除了检查请求之外,没有办法解决这个问题。当然不是问题!只是学习 – TommyBs 2012-07-06 13:13:09