Po pierwsze, expressJS nie rzuca zdarzenie uncaughtException
, proces to robi, więc nic dziwnego, że twój kod nie działa.
Dlatego użyj: process.on('uncaughtException',handler)
zamiast.
Następnie expressJS już dostarcza standardowe sposoby obsługi błędów, który ma korzystać z funkcji middleware dostarcza do tego celu, na przykład:
app.configure(function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
Funkcja ta zwraca komunikat o błędzie do klienta, z opcjonalnym stacktrace i jest udokumentowany pod numerem connectJS errorHandler.
(Zauważ, że errorHandler jest faktycznie częścią connectJS i jest wystawiony tylko przez expressJS.)
Jeśli zachowanie istniejącego errorHandler zapewnia nie jest wystarczający dla Twoich potrzeb, jej źródło znajduje się na connectJS's errorHandler
middleware i mogą być łatwo modyfikowane w zależności od potrzeb.
Oczywiście, zamiast modyfikacji tej funkcji bezpośrednio, „poprawny” sposób to zrobić, aby stworzyć swój własny errorHandler, korzystając z wersji connectJS jako punkt wyjścia, na przykład:
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.
};
I zainstalować to w expressJS jak:
app.configure(function(){
app.use(myErrorHandler);
});
Zobacz Just Connect it, Already o wyjaśnienie idei connectJS dnia filter
i provider
middleware i How To Write Middleware for Connect/Express za dobrze napisany poradnik.
Można również znaleźć te przydatne:
Wreszcie doskonałym źródłem informacji na temat testowania expressJS można znaleźć w its own tests.
listener.on 'błąd' '...' powinno działać. Czy po prostu robi normalne śledzenie stosu i awarię, nawet jeśli ta linia jest tam? – loganfsmyth
Tak, jeśli zrobię to "listener.listen (80)" , drukuje to śledzenie i awarie stosu.Nawet z 'listener.on' error ', ...' Może błąd w tym przypadku nie jest błędem Express i dlatego nie obsługuje. Ale to tylko założenie. –