http.get 怎么捕获timeout(网络超时)事件?
发布于 9 年前 作者 a316523235 10364 次浏览 最后一次编辑是 8 年前 来自 问答

平时是这样

http.get(indexUrl, function(res) {
	var body = [];
	res.on('data', function(chunk) {
		body.push(chunk);
	});
	res.on('end', function(chunk) {
		//todo
	});
	//问题在这里
	res.on('什么'  能捕获到timeou(超时)
});
9 回复

主要就是想捕获到超时,以便做相关的处理

参考response.setTimeout()啊

http.get(indexUrl, function(res) {
	var body = [];
	res.on('data', function(chunk) {
		body.push(chunk);
	});
	res.on('end', function(chunk) {
		//todo
	});
	//问题在这里
	res.on('什么'  能捕获到timeou(超时)
}).setTimeout(1000, function(){
  console.log('timeout!');
});

大概是这样吧~

req.on('error', function(err){
  if(err.code === 'ETIMEOUT'){
    // blabla
  }
})

哦~貌似不是我想的这样~

应该是

  1. req.setTimeout, 然后实际是 socket.setTimeout, see https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_request_settimeout_timeout_callback
  2. 为 socket 监听 timeout 事件 see
req.setTimeout(3000);
req.on('socket', function(socket){
  socket.on('timeout', function(){
    // timeout exceed
  });
});

好像大家都理解错了, 我是做的一个爬虫, 要监听的是爬虫超时的事件, 是要监听req的。

功能已经成功完成,谢谢以上各位给予的帮助

回到顶部