代码: var http=require(‘http’); var i=0; var req=function(req,res){ i=i+1; console.log(i); res.writeHead(200,{’Content-Type’:’text/plain’}); res.end(‘Hello World\n’); };
http.createServer(req).listen(8888,"127.0.0.1"); console.log(‘Server running…’);
控制台输出: Server running… 1 2
从控制台可以看出console.log(i)被执行了两次。只是一个请求,咋会执行两次console.log(i),如果是比较耗时的操作,岂不是白白消耗性能了。求大神解答。
3 回复
每个页面默认都会再发一个/favicon.ico
var http=require('http');
var i=0;
var req=function(req,res){
i=i+1;
console.log(i,req.url);
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('Hello World\n');
};
http.createServer(req).listen(8888,"127.0.0.1");
console.log('Server running...');
##控制台输出:
Server running...
1 '/'
2 '/favicon.ico'
通过NODEJS社区(http://webchat.freenode.net/?channels=node.js#),已解决此问题,顺便也在此说明一下
把console.log(i); 改为console.log(i+":"+req.url);即可把此问题看明白了,这时输出为: Server running… 1:/ 2:/favicon.ico
我们发现favicon也被当做是一次请求,故被执行了两次,另外有意思的地方就是把res.end(‘Hello World\n’);注释或删除,console.log(i)就不会被执行两次了。