Hatena::Groupnodejs

Node.jsで遊ぶよ

 | 

2010-10-20

リクエスト失敗時に Node.js が終了してしまう

12:24

http = require('http');

var cli = http.createClient(80, '0.0.0.0');
var req = cli.request('GET', '/');
req.end();
req.on('response', function(res) {
  console.log(res);

  res.on('data', function() {
    //
  });
  res.on('end', function() {
    console.log('finish!');
  });
});

こんなことをよくやると思うが、もしサーバーが存在しなかったり、通信中にエラーがあったりすると、node.js が止まってしまうことがよくある。上の 0.0.0.0 は極端な例だけど、普通のリクエストの途中で終わったりすることもよくある。

node.js:50
    throw e;
    ^
Error: ECONNREFUSED, Connection refused
    at IOWatcher.callback (net:870:22)
    at node.js:607:9

これが起こるのは、httpClient の error イベントを catch していないため。

cli.on('error', function(e) {
  console.log(e);
});

これで解決。on('error') というのは Node.js では非同期 catch 相当になっている。

Event: 'error'

function (exception) { }

If an error was encountered, then this event is emitted. This event is special - when there are no listeners to receive the error Node will terminate execution and display the exception's stack trace.
http://nodejs.org/api.html

でもこれだと、連続してリクエスト送ってて一つがエラー出したときとかに、どれがエラー出したかを知ることができない。cli.on('error') じゃなくて req.on('error') のほうがいいのになあ…

PhiliphiesePhiliphiese 2017/04/12 04:28 http://stemmeries.xyz <a href="http://stemmeries.xyz">norsk kasino</a> http://stemmeries.xyz - norsk kasino

SailiphieseSailiphiese 2017/05/25 00:33 http://undeclaiming.xyz <a href="http://undeclaiming.xyz">norsk kasino</a> http://undeclaiming.xyz - norsk kasino

DannybigDannybig 2017/06/27 00:12 Attention Required! | Cloudflare
<a href=http://acheterdufrance.com/>Attention Required! !</a>

ゲスト



トラックバック - http://nodejs.g.hatena.ne.jp/edvakf/20101020
 |