2016-03-29 19 views
1

を変更するにはどうすればNodeJSに多少新たなんだ、と現在の私は、現在の私のコードは、以下に示す、APIサーバーの残りの部分に私のアプリの要求を転送するためにExpressと要求(https://github.com/request/request)を使用:NodeJS要求ストリーム応答

app.use('/rest/*', function(req, res) { 
    req.pipe(request('http://ipaddress/api')).pipe(res); 
}); 

このコードはREST APIサーバーが正常な場合に機能しますが、残りのapiサーバーがダウンすると、nodejsアプリケーションも停止します。要求ストリームは失敗し、エラーは私のアプリケーションで検出されないためです。 は、私はエラーを記録し、私のNodeJSアプリのクラッシュを防ぐことができます

app.use('/rest/*', function(req, res) { 
    req.pipe(request('http://ipaddress/api').on('error', function(err) { 
     console.log(err); 
    })).pipe(res); 
}); 

このように、それは、ストリームのエラーを処理する1つの方法を提供要求githubのページをチェックし、エラーがそう起こったとき、私は応答を変更したいです

app.use('/rest/*', function(req, res) { 
    req.pipe(request('http://ipaddress/api').on('error', function(err) { 
     console.log(err); 
     // what I want to do in pseudocode 
     response.statusCode = 500; 
     response.json = { 
      reason: err.errno 
     }; 
    })).pipe(res); 
}); 

は私の問題を解決するためのいずれかの方法があります。変更された応答は、私は擬似コードで何をしたいのか、例えば、最後の1にパイプすることができますか?アイデアありがとう!

+1

と同様に扱います。その代わりに、ノードサーバーからapiサーバーにHEADリクエストを出してオンラインになっているかどうかを確認し、それがうまくいく場合はAPIリクエストをクライアントにパイプします。それ以外の場合は、クライアントに任意の応答を送信できます。 –

答えて

0

未テストですが、応答を処理するためにエラーをミドルウェアに戻すことができますか?ヘッダがすでにエラーが発生する可能性がある時点で送信されてきたので、

app.use('/rest/*', function(req, res, next) { 
    req.pipe(request('http://ipaddress/api').on('error', function(err) { 
     return next(err) 
    })).pipe(res); 
}); 

は、単一の要求にできない場合がありますので、

// Exception handling 
app.use(function (error, req, res, next) { 
    console.log(error); 
    res.status(500).send(JSON.stringify(error));  
    next(); 
}); 
+0

ありがとう、それは動作します!私の唯一の問題は、例外処理メソッドで使用されるnext()メソッドです。next()メソッド呼び出しを削除しようとしましたが、これも機能します。 next()がここで使われた理由を教えてください。 – Bill

+0

実行するアクション(ミドルウェア)がさらにある場合にのみ例外処理で実際に使用されます。たとえば、ログ機能があるかもしれません。 – ossie

+0

ありがとうございました!!! – Bill

関連する問題