如何使用http2处理node.js中的ETIMEDOUT?

时间:2015-08-02 18:14:27

标签: javascript node.js http2

我对node.js的了解并不是很好,我可能会遗漏一些明显的东西。

我需要&#34;爬行&#34;实验的网址列表(http-https,主机和端口的组合)。其中一个网址没有响应(它在本地,所以我猜其中一个中间框正在阻止)它,它很好,但我打破了我的应用程序,因为我无法捕捉错误:< / p>

var http2  = require('http2');

var req = http2.raw.get('http://xxx.yyy.zzz.a:23/', function(response) {
  var content = '';
  response.on('data', function(chunk) {
    content += chunk;
  })

  response.on('end', function() {
    console.log(content);
    console.log('end');
  });
});

req.on('error', function(error) {
  console.error(error);
});

它抛出以下错误(用process.on('uncaughtException', ...)抓住它):

{ [Error: connect ETIMEDOUT xxx.yyy.zzz.a:23]
  code: 'ETIMEDOUT',
  errno: 'ETIMEDOUT',
  syscall: 'connect',
  address: 'xxx.yyy.zzz.a',
  port: 23 }

Error: connect ETIMEDOUT xxx.yyy.zzz.a:23
    at Object.exports._errnoException (util.js:814:11)
    at exports._exceptionWithHostPort (util.js:837:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1044:14)

Try-catch不起作用,因为该函数是异步的。 request.on('error')似乎没有发现此错误。此库中未实现setTimeout

我想我需要在TCP连接中添加一个事件,但我不知道如何。

我使用node.js 0.12.7和http2 3.2.0

有什么想法吗?真的很感激

0 个答案:

没有答案