Usando Domínios com Express

Configurar o Express para usar os novos domínios node.js pode ser um pouco complicado, mas este pequeno snippet resolverá o problema:

var app = express.createServer();

// a bunch of your middleware...
app
.use(setupDomains);
// the rest of your middleware...

var domain = require('domain');
function setupDomains(req, res, next) {
var reqd = domain.create();
domain
.active = reqd;
reqd
.add(req);
reqd
.add(res);
reqd
.on('error', function(err) {
req
.next(err);
});
res
.on('end', function() {
console
.log('disposing domain for url ' + req.url);
reqd
.dispose();
});
reqd
.run(next);
}

Dessa forma, se alguma coisa lançar um erro que foi chamado de uma rota expressa, mas não fazia parte da mesma pilha de chamadas, o erro retornará ao manipulador de erros dessa rota, em vez de destruir todo o processo.

Existem duas ressalvas.

O primeiro é que ele parece quebrar se você usar setupDomains antes das sessões.

A segunda é estar ciente de que se algum io, como conectores de arquivo ou banco de dados, for configurado e anexado à solicitação, ele será descartado com a solicitação e tudo irá para o inferno. Portanto, certifique-se de usar um domínio separado ao abrir qualquer io que dure mais do que o pedido.