4

ロギング/デバッグのために、ブラウザに送信される直前の応答の最初の 100 文字程度を出力したいと思います。これを行うためにミドルウェアと応答オブジェクトでできる簡単なことはありますか?

理想的には次のようなものです:

app.use(function(req, res, next) {
    console.log('Response snippet: '+((res.body || '').substr(0,100)));
    next();
});

応答に本文がないことを除いて、送り返される現在の本文がどこに渡されるかを完全に把握できません。

アップデート:

ピーターの答えはうまくいきました。ミドルウェアコードをここに配置して、将来の視聴者をクリックする手間を省くと思います。

App.use(function(req, res, next) {
    var end = res.end;
    res.end = function(chunk, encoding){
        res.end = end;
        if (chunk) {
            console.log(chunk);
        }
        res.end(chunk, encoding);
    };
    next();
});
4

1 に答える 1

5

したがって、応答出力 API にフックする必要があります。これは、ミドルウェアでは、リクエスト処理にフックするほど簡単ではありません。見るのに最適な例は、connect の組み込みロガー ミドルウェアです。基本的に、メソッドにモンキー パッチをreq.end適用し、そのデータをそのストリームに転送してから、実際のreq.end関数を呼び出します。このパターンに従う必要があります。これは、非ストリーミング レスポンスではうまく機能するはずです。

そのパターンは、データの最後のチャンクのみを提供することになる場合があります (ストリーミングされた応答の場合)。その場合、res.write代わりにモンキー パッチを適用するだけres.endで、最初のチャンクにアクセスできます。res.write最初のチャンクをログに記録したら、monkey-patchを解除するだけです。

于 2012-12-05T05:38:24.713 に答える