Как мне перехватить событие «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 не принимать обратные вызовы, поэтому я не могу просто обернуть их, вызвать оригинал, а затем выполнить свою работу на основе кода ответа, который был установлен, когда они перезванивают мне (потому что они не перезвонят мне).

Есть ли простой способ сделать это?

Ответы на вопрос(3)

Ваш ответ на вопрос