Nodejs http模块,请求到来后执行的回调函数,每次请求会被执行两次吗?
Nodejs http模块,请求到来后执行的回调函数,每次请求会被执行两次吗?
RT,为什么这段代码,第一次请求输出2,第二次开始就是递增2了?? 第一次输出2是正常的,因为自增1,从第二次开始就是 4 6 8 10。。。。。why?
var http = require('http');
var i = 1;
http.createServer(function(req, res){
i++;
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(i + '');
}).listen(3000);
4 回复
浏览器访问的??
浏览器会默认访问两次…请求favicon.ico …
把req.url打印出来果然如此,多谢
在你提供的代码中,i
变量是在全局作用域中定义的。每次HTTP请求到来时,i
变量会递增并输出当前的值。因此,在第一次请求时,i
的初始值为1,递增后变为2,所以输出2。
从第二次请求开始,i
已经不再是从1开始递增,而是基于前一次请求后的值继续递增。这导致每次请求输出的值都会增加2。例如,如果第一次请求后i
变成2,则第二次请求时i
变为3,输出4;第三次请求时i
变为4,输出6,依此类推。
如果你希望每次请求的计数独立递增,可以将计数器重置或使用局部变量。以下是修改后的代码示例:
var http = require('http');
http.createServer(function(req, res){
var i = 1; // 在回调函数内部定义i,每次请求都会重新初始化为1
i++;
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(i + '');
}).listen(3000);
在这个修改后的版本中,每次请求都会创建一个新的局部变量i
,并将它初始化为1。这样每次请求输出的值都将从2开始,而不是基于上一次请求的结果。
如果你确实需要一个全局计数器(比如跟踪总请求数),可以单独定义一个变量来实现这个功能。