Jak uchwycić zdarzenie „końca odpowiedzi” w node.js + express?

Chciałbym napisać ekspresową funkcję middleware, która ustawi słuchacza na zdarzenie „end” odpowiedzi, jeśli takie istnieje. Celem jest czyszczenie w oparciu o kod odpowiedzi http, który użytkownik końcowy zdecydował się wysłać, np. rejestrowanie kodu odpowiedzi i wycofywanie / zatwierdzanie transakcji db. tj. chcę, aby to czyszczenie było przezroczyste dla wywołującego końcowego.

Chciałbym zrobić coś w stylu express:

Oprogramowanie pośrednie trasy

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();
}

Trasa:

app.post ("/something", function (req, res) { 
    db.doSomething (function () {
       if (some problem) {
          res.send (500);
       } else {
          res.send (200);
       }
    });
 }

Kiedy to wypróbuję, obsługa zdarzenia „koniec” nigdy nie zostanie wywołana. To samo dlares.on('close'), o którym czytałem w innym poście. Czy takie wydarzenia są zwolnione?

Jedyny inny sposób, w jaki mogę to zrobić, to zawijanieres.end lubres.send z moją własną wersją w niestandardowym oprogramowaniu pośrednim. To nie jest idealne, ponieważres.end ires.send nie przyjmuj wywołań zwrotnych, więc nie mogę ich po prostu zawinąć, zadzwonić do oryginału, a następnie zrobić moją rzecz w oparciu o kod odpowiedzi, który został ustawiony, gdy oddzwonią do mnie (ponieważ nie oddzwonią do mnie).

Czy można to zrobić w prosty sposób?

questionAnswers(3)

yourAnswerToTheQuestion