0

node.js に関する私の知識はあまりよくなく、明らかな何かを見落としている可能性があります。

実験のために、URL のリスト (http-https、ホスト、およびポートの組み合わせ) を「クロール」する必要があります。これらの URL の 1 つが応答していません (ローカルで応答しているため、ミドルボックスの 1 つがブロックしていると思います)。問題はありませんが、エラーをキャッチできないため、アプリが壊れます。

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