我对 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
有任何想法吗?非常感谢