2011-12-28 14 views
11

私はこのように、存在しないホストにアクセスするためにhttpモジュールを使用しようとしているとき:存在しないホスト上でnode.js httpエラーをキャッチする方法は?

requestToRemote = http.createClient(80, 'fjasdfhasdkfj.vvvxcz').request(
    method, 
    path, 
    headers 
); 

しかし、私は次のエラーを取得:

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: getaddrinfo ENOENT 
    at errnoException (dns.js:31:11) 
    at Object.onanswer [as oncomplete] (dns.js:140:16) 

を私はこのエラーをキャッチしたいのですが、だからtry/catchを試してみて、リクエストのプロパティのエラーリスナを設定しましたが、もしうまくいけば何もしません。どのようにエラーをキャッチできますか?

答えて

9

は、エラーが要求を、http.Clientからスローされていないように見えます。どのようなものについて:

var site = http.createClient(80, host); 
site.on('error', function(err) { 
    sys.debug('unable to connect to ' + host); 
}); 
var requestToRemote = site.request(...); 

FYI、http.createClientが廃止されました - 取得する便利なメソッド使用して動作するはずです以下:それは、その後解決伴うだろうと、これは良い解決策ではありません

http.get({host: host}, function(res) { 
    ... 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 
+0

コールバックで 'res'の値を使ってレスポンスのテキストを確認するにはどうしたらいいですか? –

-1

コードを実行する前にdnsモジュールを使用してホストを解決できます。

http://nodejs.org/docs/latest/api/dns.html#dns.resolve

+4

をホスト名は2回です。キャッシュされている場合でも、アプリのニーズに応じて、迅速に乗算できる小さなペナルティがあります。もちろん、あなたは要求をするときにホスト名の代わりにネットワークアドレスを使うことができますが、あなた自身でホストを指定するリクエストヘッダを処理する必要があります。 – Brad

関連する問題