Express 3 Error Middleware wird nicht aufgerufen

Ich versuche, die Fehlerbehandlung für meine Express-App einzurichten und stoße auf das folgende Problem.

Ich habe eine Fehler-Middleware definiert und als letzte Middleware hinzugefügt:

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

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

Jetzt würde ich erwarten, dass diese Middleware aufgerufen wird, wenn ein Fehler auftritt:

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

Meine Middleware wird jedoch nie aufgerufen! Der Browser zeigt jedoch den Stack-Trace an. Dies scheint, dass es eine andere Middleware gibt, die diesen Fehler abfängt und verarbeitet, bevor ich etwas dagegen unternehmen kann.

Das Problem ist, dass ich keine Ahnung habe, wo diese Middleware definiert werden könnte, da ich ein sehr einfaches Setup habe:

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

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

Warum wird meine Fehlerbehandlungs-Middleware nicht aufgerufen? Wo findet diese 'Standard'-Fehlerbehandlung statt?

Vielen Dank!

* EDIT * Ich sehe, dass die Middleware tatsächlich funktioniert. Dies ist jedoch der Fall, wenn ich es von einer anderen Middleware-Funktion aus aufrufe. Es wird jedoch nicht aufgerufen, wenn der Fehler innerhalb einer als Expressroute definierten Funktion auftritt (GET, POST usw.). Das ist sehr seltsam. Wenn ich meine Error Middleware zu den Route Callbacks hinzufüge, funktioniert es:

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

* EDIT 2 - ACCEPTABLE WORKAROUND GEFUNDEN ** Ich bin überrascht, dass es so gemacht werden muss. Da ich viele Einträge / Fragen zur Fehlerbehandlung im Express gelesen hatte und diese Möglichkeit nie erwähnt fand. Es sieht jedoch so aus, als würde ein Fehler, der innerhalb eines Route-Callbacks auftritt, von normalen Fehler-Middleware-Handlern nicht erkannt werden. Sie müssen einen Fehlerbehandler auf Routenebene definieren.

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage