0

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

我需要为实验“抓取”一个 url 列表(http-https、主机和端口的组合)。其中一个 url 没有响应(它在本地响应,所以我猜其中一个中间框正在阻塞)它,这很好,但我破坏了我的应用程序,因为我无法捕捉到错误:

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

有任何想法吗?非常感谢

4

0 回答 0