Node.js混淆了每个循环的输出
我想知道如果有人能帮助我理解以下行为。 如果我在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);
然后,每当我请求页面,我看到文字“underscore.js说x”3次。 我期望这样做,因为循环中有3个数字,每个请求都会重置x。 但是,如果我有以下(x移到createServer的callback之外):
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表示x行”,我可以理解它每次都附加到同一个variables,但是我希望它会每次打印结果为3的倍数,所以首先打印总共3行,第二个打印6,第三个打印9等。
我很新的node.js所以会很感激,如果有人可以解释这种行为或如何循环以我不希望的方式工作。
谢谢
这可能是一个令人失望的答案,但仍然。
您的浏览器将向/favicon.ico
发出一个HTTP请求,该请求将/favicon.ico
您的脚本,并为每个请求添加另外3行到您的x
variables。
- 你刷新你的页面,看到3行。
- 您的浏览器请求
/favicon.ico
,并添加3个附加行 - 刷新页面,并看到6行+ 3个附加。
- 您的浏览器请求
/favicon.ico
,并添加3个附加行
…等
您将能够通过检查以favicon.ico
结尾的request.url
参数来解决此问题;
if (/\/favicon.ico$/.test(request.url)) { // don't incremement }
…或者你可以做更多的funk-ily与url()
模块;
if (require('url').parse(request.url).pathname === '/favicon.ico') { // don't incremement. }
- 在node.js CLI中获取浏览器响应或callback
- curl获取POST响应,但node.js没有获得POST响应
- 错误被抛出,但错误响应对象在Mongoose中为空
- node-express errror:express deprecated res.send(status):use res.sendStatus(status)instead
- 如何有可变数量的蓝鸟承诺? (的NodeJS)
- nodejs http response.write:可能是内存不足吗?
- 你能发送来自另一台服务器的HTTP响应吗?
- 请求来自不存在的站点的HTTP响应时,Node.js脚本将中断
- Nodejs Http请求没有响应