nodejs的一个疑问,为什么req被执行了两次(从控制台输出可看出)
发布于 2年前 作者 zsq8899 2090 次浏览

代码: 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)就不会被执行两次了。

尽管此问题已解决了,还是感谢TONNY兄

回到顶部