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?