Express 3 błąd oprogramowania pośredniego nie jest wywoływany

Próbuję skonfigurować obsługę błędów dla mojej ekspresowej aplikacji i uruchomić następujący problem.

Zdefiniowałem oprogramowanie pośrednie błędu i dodałem je jako ostatnie oprogramowanie pośrednie:

// error handler
app.use(function(err, req, res, next) {

    console.log('JUST TESTING. ERROR HANLDER HAS BEEN CALLED...');
    next(err);
});

Teraz oczekiwałbym, że to oprogramowanie pośrednie będzie wywoływane za każdym razem, gdy wystąpi błąd:

app.get('/datenschutz', function(req, res, next){
        return next(new Error('Just testing')); // handle everything here
    });

Jednak moje oprogramowanie pośrednie nigdy nie jest wywoływane! Przeglądarka wyświetla jednak ślad stosu. Wydaje się, że istnieje inne oprogramowanie pośrednie, które łapie ten błąd i przetwarza go, zanim będę mógł coś z tym zrobić.

Problem polega na tym, że nie mam pojęcia, gdzie można zdefiniować to oprogramowanie pośrednie, ponieważ mam bardzo prostą konfigurację:

// setup ssl for local testing
var
    app = express();

app.
    use(express.static(__dirname + '/public')).
    use(express.bodyParser()).
    use(express.cookieParser());

Dlaczego mój błąd obsługi oprogramowania pośredniego nie jest wywoływany? Gdzie odbywa się ta „domyślna” obsługa błędów?

Dzięki!

* EDYTOWAĆ * Widzę, że oprogramowanie pośrednie rzeczywiście działa. Jest tak jednak w przypadku wywołania go z innej funkcji oprogramowania pośredniego. Jednak nie jest wywoływany, jeśli błąd występuje wewnątrz funkcji zdefiniowanej jako trasa ekspresowa (GET, POST itp.). To jest bardzo dziwne. Jeśli dodam moje oprogramowanie pośrednie błędu do wywołań zwrotnych trasy, to działa:

app.get('/testError', function(req, res, next){
        return next(new Error('Just testing')); // handle everything here
    }, function(err,req,res,next) {
        console.log('This error handler is called!!');
        return next();
    });

* EDYTUJ 2 - ZNALEZIONO OBEJMOWANY OBRAZ ** Jestem zaskoczony, że trzeba to zrobić w ten sposób. Ponieważ przeczytałem wiele wpisów / pytań dotyczących obsługi błędów w ekspresowym i nigdy nie znalazłem takiej możliwości. Wydaje się jednak, że jeśli błąd pojawi się w wywołaniu trasy, regularny błąd programów pośredniczących nie odbierze go. Musisz zdefiniować procedurę obsługi błędów na poziomie trasy.

app.all('*', function(err,req,res,next) {
        console.log('This is a global error handler at route level....');
        return next(err);
    });

questionAnswers(3)

yourAnswerToTheQuestion