Я хотел бы написать экспресс-функцию промежуточного программного обеспечения, которая настраивает прослушиватель на событие 'end' ответа, если таковое существует. Цель состоит в том, чтобы выполнить очистку на основе кода ответа 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);
}
});
}
Когда я пытаюсь это сделать, обработчик события 'end' никогда не вызывается. То же самое для res.on('close')
, о котором я читал в другом посте. Запускаются ли такие события?
Единственным другим способом, который я могу придумать, является обертка res.end
или res.send
моей собственной версией в специальном промежуточном программном обеспечении. Это не идеально, потому что res.end
и res.send
не принимают обратные вызовы, поэтому я не могу просто обернуть их, вызвать оригинал, а затем делать свое дело на основе код ответа, который был установлен, когда они перезванивают мне (потому что они не перезвонят мне).
Есть ли простой способ сделать это?