14

応答時間とステータスコードをログに記録してデータベースに送信するミドルウェアを作成しようとしています。ただし、どのイベントを使用すればよいかわかりません。ノードのドキュメントにはcloseイベントがありますが、発生することはありません。endどちらも機能しません。ただし、headerそうですが、ドキュメントが見つかりません。

app.use(function(req, res, next) {
  res.on('close', function() {
    console.log('close')
  })

  res.on('end', function() {
    console.log('end')
  })

  res.on('header', function() {
    console.log('header')
    console.log(res.statusCode)
  })

  next()
})

起動するだけheaderで、正しいres.statusCodeが返されます。

私の質問:

  1. なぜclose発砲しないのですか?なぜheader発砲するのですか?
  2. これは信頼できる方法ですか?
4

2 に答える 2

23

終了イベントがあり、応答が送信されたときに発行されます。

app.use(function(req, res,next){
    res.on('finish', function(){
        console.log('the response has been sent');
    });
    next();
});
于 2016-07-25T16:30:34.903 に答える
9

closeresponse.end()が呼び出される前に接続が終了した場合にのみ、イベントが発行されます。 headerによって発生したイベントconnect。これはnode.jshttp.ServerResponseネイティブイベントではありません。

connect responseTimeミドルウェアを見てください。私はそれがあなたを助けるべきだと思います。

更新

これがheaderイベントドキュメントですhttps://github.com/senchalabs/connect/blob/gh-pages/tests.md#patch

hederhttps://github.com/senchalabs/connect/blob/master/lib/patch.jsによってプロキシされたwriteHeadメソッドから起動されますconnect

于 2012-09-02T21:45:34.203 に答える