Como faço para capturar um evento de “resposta final” em node.js + express?

Eu gostaria de escrever uma função de middleware expressa que configura um ouvinte no evento 'end' da resposta, se existir. O objetivo é fazer a limpeza com base no código de resposta http que o manipulador final decidiu enviar, por exemplo, registrando o código de resposta e rollback / commit de uma transação do banco de dados. ou seja, eu quero que essa limpeza seja transparente para o chamador final.

Eu gostaria de fazer algo como o seguinte em expresso:

O middleware de rota

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();
}

O percurso:

app.post ("/something", function (req, res) { 
    db.doSomething (function () {
       if (some problem) {
          res.send (500);
       } else {
          res.send (200);
       }
    });
 }

Quando eu tento isso, o manipulador de eventos 'end' nunca é chamado. O mesmo parares.on('close'), que eu li em outro post. Esses eventos são disparados?

A única outra maneira que eu posso pensar em fazer isso é embrulharres.end oures.send com minha própria versão em um middleware personalizado. Isso não é ideal, porqueres.end eres.send Não dê callbacks, então eu não posso apenas envolvê-los, ligar para o original e depois fazer o meu trabalho com base no código de resposta que foi definido quando eles me ligam de volta (porque eles não me ligam de volta).

Existe uma maneira simples de fazer isso?

questionAnswers(3)

yourAnswerToTheQuestion