2016-06-01 7 views
2

Expressアプリケーションでロガーを実装しようとしています。私は、リクエストごとに返されたリクエストとレスポンス(ステータスコードとボディ)を記録できるようにする必要があります。私は、応答を送信するために使用resオブジェクトのメソッドに渡されたデータにアクセスする必要がエクスプレスミドルウェアでのリクエストと応答のログ

function (req, res, next) { 
    ... 
    res.on('finish', function() { 
     Logger.debug('For request', req); 
     Logger.debug('Response sent'); 
    }); 
    ... 
} 

:私はこのようになりますミドルウェアを書き始めました。例えば、私が持っていた1つのコントローラであれば:

function (req, res, next) { 
    ... 
    res.on('finish', function() { 
     Logger.debug('For request', req); 
     var data = res.data; // or res.body, or whatever 
     Logger.debug('Response: ' + res.statusCode, data); 
    }); 
    ... 
} 

エクスプレスresオブジェクト内の任意のプロパティやメソッドがあります:

res.json({ foo: 'bar' }) 

私は{ foo: 'bar' }オブジェクト、このようなものが多分ことを取得する方法が必要です私はそれを使うことができますか?あるいは、要求とその応答を記録するためのより良い戦略がありますか?

+1

['express-interceptor'](https://github.com/axiomzen/express-interceptor)のように、応答本体に手を入れるために使用できるさまざまなモジュールがあります。 – robertklep

答えて

0

response.end(またはsend)メソッドが呼び出されたときにトリガーされるイベントリスナーが必要です。 Expressにはこのようなリスナーはありませんが、node.js raw apiにはそのリスナーがあります。

a finish event in node.js http server instancesがあります。これは、あなたがクライアントにあなたの応答を送った後にできることです。

あなたは簡単に既存のExpressのサーバに統合することができます:

response.on('finish',() => { 
    // Do your logging here. 
}); 

私はそれが要求時にjavascriptオブジェクトにログを保存し、応答を送信したときに終了イベントのコールバックの内側にそれらを送信お勧めします。

関連する問題