Prima di tutto, expressJS non lancia l'evento uncaughtException
, il processo funziona, quindi non sorprende che il tuo codice non funzioni.
Quindi utilizzare: process.on('uncaughtException',handler)
invece.
Avanti, expressJS fornisce già un mezzo standard di gestione degli errori, che è quello di utilizzare la funzione di middleware che fornisce per questo scopo, come in:
app.configure(function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
Questa funzione restituisce un messaggio di errore al client, con optional stacktrace ed è documentato allo connectJS errorHandler.
(Si noti che errorHandler è in realtà parte di connectJS ed è esposto solo da expressJS.)
Se il comportamento del errorHandler esistente fornisce non è sufficiente per le vostre esigenze, la sua sorgente si trova a connectJS's errorHandler
middleware e può essere facilmente modificata per soddisfare le tue esigenze.
Naturalmente, piuttosto che modificare direttamente questa funzione, il modo "corretto" per farlo è quello di creare il proprio errorHandler, utilizzando la versione connectJS come punto di partenza, come in:
var myErrorHandler = function(err, req, res, next){
...
// note, using the typical middleware pattern, we'd call next() here, but
// since this handler is a "provider", i.e. it terminates the request, we
// do not.
};
e installare in expressJS come:
app.configure(function(){
app.use(myErrorHandler);
});
Vedi Just Connect it, Already per una spiegazione dell'idea di connectJS di filter
e provider
middleware e How To Write Middleware for Connect/Express per un tutorial ben scritto.
Si potrebbe anche trovare questi utili:
Infine, un'ottima fonte di informazioni per quanto riguarda expressJS test può essere trovato in its own tests.
'errore' 'listener.on, ...' dovrebbe funzionare. Fa semplicemente il normale stack trace e crash anche se quella linea è lì? – loganfsmyth
Sì, se faccio questo 'listener.listen (80)' stampa traccia dello stack e si blocca.Anche con 'listener.on' errore ', ...' Forse l'errore si è verificato in questo caso non è l'errore Express e questo è il motivo per cui non gestisce. Ma è solo supposizione. –