2

クライアントと、node.js API の一歩下流にある Java サーバーとの間の API として機能する node.js サーバーを作成しています。API は、クライアントからの受信 HTML 要求を受け入れ、それらを再フォーマットし、Java サーバーに送信します。Java サーバーは、その応答を node.js API に返し、クライアントに返します。サーバーがダウンしている場合を除いて、これはすべてうまく機能します。502 または 302 をキャッチできるように、そのイベントをキャッチする必要があります... これが私のコードです。

async.waterfall(
    [           
        function(callback){
            var options = { host: 'localhost', port: '8080',
            path: '/javaServerWork/' + req.query.foo + '?toDo=' + req.query.bar,
            method: 'GET',
            headers: { accept: 'application/json' }
            };

            http.request(options, function(response){
                response.on('error', function(exception) { Console.log("error here"); }
                if(response.statusCode == '200'){ callback(null, response); }
                else if (response.statusCode == '502') { res.send('502'); }
                else { res.send('not 200 and not 502'); }
            }).end();
        },

        function(response){
            var javaResponse = '';
            response.on('error', function(exception){ Console.log("error here");});
            response.on('data', function (chunk){ javaResponse += chunk; });
            response.on('end', function(){                  
                res.send(javaResponse);
            })
        }
    ]
);

このノード サーバーを起動し、node.js サーバーにリクエストを発行してから Java サーバーに到達しようとすると、node.js がクラッシュし、コンソールに次のエラーが表示されます。

events.js:69 スロー引数[1]; // Unhandled 'error' event ^ Error: connect ECONNREFUSED at errnoException (net.js:846:11) at Object.afterConnect [as oncomplete] (net.js:837:19)

私がする必要があるのは、Java サーバーがダウンしているときに「無応答」をキャッチすることだけです。これにより、ノードがクラッシュすることなく、別の関数を実行したり、その事実をクライアントに返すことができます。これは非常に単純かもしれませんが、うまくいくものは何も見つかりませんでした。私は process.on('uncaughtException') を試しました。(コードのように) response.on('error') を試しました。

私はノードが初めてで、問題がどこにあるのかわかりません...どんな助けも大歓迎です!

4

1 に答える 1

5

試しましたか

http.request(options, function(response){
            response.on('error', function(exception) { Console.log("error here"); }
            if(response.statusCode == '200'){ callback(null, response); }
            else if (response.statusCode == '502') { res.send('502'); }
            else { res.send('not 200 and not 502'); }
}).on('error', function(e) {
    console.log("handle error here");
}).end();

応答オブジェクトではなく、http.request が返す要求オブジェクトでエラーがスローされているようです。

( http://nodejs.org/api/http.html#http_http_request_options_callback )

于 2013-03-02T19:13:41.227 に答える