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