Как мне перехватить событие «end end» в node.js + express?
Я хотел бы написать экспресс-функцию промежуточного программного обеспечения, которая настраивает прослушиватель на конец ответа. событие, если таковое существует. Цель состоит в том, чтобы выполнить очистку на основе кода ответа http, который конечный обработчик решил отправить, например, регистрация кода ответа и откат / принятие транзакции БД. я хочу, чтобы эта очистка была прозрачной для конечного абонента.
Я хотел бы сделать что-то вроде следующего в экспрессе:
Промежуточное программное обеспечение маршрута
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
не принимать обратные вызовы, поэтому я не могу просто обернуть их, вызвать оригинал, а затем выполнить свою работу на основе кода ответа, который был установлен, когда они перезванивают мне (потому что они не перезвонят мне).
Есть ли простой способ сделать это?