nodejs http响应两次

用nodejs搭建最简单的http服务器,代码如下:

var http=require('http');
var url=require('url');
var i=0;
http.createServer(function(req,res){
//	console.log(url.parse(req.url));
	res.end(''+i);
	console.log(i);
	i++;
}).listen(3000);

打开浏览器,刷新一次,可以看见运行了两次,每次刷新输出的i比上次多2.

这是为什么呢,我们把代码的注释去掉

var http=require('http');
var url=require('url');
var i=0;
http.createServer(function(req,res){
	console.log(url.parse(req.url));
	res.end(''+i);
	console.log(i);
	i++;
}).listen(3000);
再次打开浏览器,刷新,看到控制台的输出如下:

{ protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?asd=ads&asdfa=adsf',
  query: 'asd=ads&asdfa=adsf',
  pathname: '/',
  path: '/?asd=ads&asdfa=adsf',
  href: '/?asd=ads&asdfa=adsf' }
0
{ protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: null,
  query: null,
  pathname: '/favicon.ico',
  path: '/favicon.ico',
  href: '/favicon.ico' }
1

可以看到,一次刷新确实运行了两次,因为浏览器默认一次会请求favicon.ico,如果这不符合我们的业务逻辑,就可以通过解析url,当请求ico时不做逻辑处理。

var http=require('http');
var url=require('url');
var i=0;
http.createServer(function(req,res){
	if(url.parse(req.url).path=='/favicon.ico')
		return;
        console.log(url.parse(req.url).path);
        res.end(''+i);
        console.log(i);
        i++;
}).listen(3000);



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值