存在する場合、応答の「終了」イベントにリスナーを設定する高速ミドルウェア関数を書きたいと思います。目的は、終了ハンドラーが送信することを決定した http 応答コードに基づいてクリーンアップを行うことです。たとえば、応答コードのログ記録や、db トランザクションのロールバック/コミットなどです。つまり、このクリーンアップをエンド コーラーに透過的にしたいのです。
私はエクスプレスで次のようなことをしたいと思います:
ルートミドルウェア
function (req, res, next) {
res.on ('end', function () {
// log the response code and handle db
if (res.statusCode < 400) { db.commit() } else { db.rollback() }
});
next();
}
ルート:
app.post ("/something", function (req, res) {
db.doSomething (function () {
if (some problem) {
res.send (500);
} else {
res.send (200);
}
});
}
これを試してみると、「終了」イベント ハンドラが呼び出されません。res.on('close')
別の投稿で読んだ についても同じです。そのようなイベントは発生しますか?
これを行う唯一の方法は、ラッピングres.end
するかres.send
、カスタム ミドルウェアで独自のバージョンを使用することです。これは理想的ではres.end
ありres.send
ません。コールバックを使用しないため、それらをラップして元のコードを呼び出してから、コールバックされたときに設定された応答コードに基づいて自分のことを行うことはできません (コールしないため)。私に戻る)。
これを行う簡単な方法はありますか?