Ich habe eine Kette von "routenspezifischer Middleware" für diese Route, so:
%Vor% [mw1, mw2]
sind die Middleware, die für die Route /some/path
spezifisch ist.
Dies unterscheidet sich von der serverweiten Middleware wie folgt:
%Vor%Wo gilt es für alle definierten Routen.
Jetzt ist mein Problem, dass ich die Kette verlassen möchte. I.e. Wenn success
in mw1
falsch ist, möchte ich nicht, dass mw2
aufgerufen wird. Wenn success
in mw2
falsch ist, kann ich nicht für die route-Funktion aufrufen. Zurzeit scheinen sowohl mw1
als auch mw2
aufgerufen zu werden, ob next()
aufgerufen wird - und ich weiß nicht warum.
Wie kann ich das machen?
Ein bisschen mehr Basteln ergab die Antwort:
%Vor% Der Trick wurde eine Antwort gesendet: resp.send(406, 'Invalid because of this');
Kurz vor dem Zerstören der Verbindung: req.connection.destroy();
In der Tat nicht die Verbindung zu zerstören, fand ich auch im allgemeinen Fall zu arbeiten.
(Aber war in meinem speziellen Fall erforderlich, und ist nicht in den Rahmen dieser Frage.)
Wenn die Antwort bereits gesendet wurde, ruft express nicht automatisch next()
für Sie auf, wie es sonst zu tun schien.
Sie können next( 'route' )
aufrufen, wie auf der Express-API-Referenz, Abschnitt application routing
:
Es können mehrere Rückrufe gegeben werden, alle werden gleich behandelt und verhalten sich genau wie Middleware, mit der einen Ausnahme, dass diese Rückrufe möglicherweise Rufen Sie
next('route')
auf, um die Callback (s) der verbleibenden Route zu umgehen.
Ich hatte den Eindruck, dass, wenn Sie weder next()
aufrufen noch eine Antwort in einer Route-Handling-Funktion senden, Express einfach hängen bleibt. Auch FWIW habe ich kein Array benutzt, meins sieht aus wie server.post('/some/path', mw1, mw2, function(req, resp) {...
Wie auch immer. Eine Alternative könnte darin bestehen, Ihren Code so umzustrukturieren, dass Sie nur eine einzige Verarbeitungsfunktion haben. Haben Sie einen guten Grund dafür, dass mw1 und mw2 Middleware sind statt regulärer asynchroner Funktionen, die Ihr Handler aufruft?
%Vor%Tags und Links javascript node.js middleware express connect