Bevor Sie verstehen next
, müssen Sie eine kleine Vorstellung vom Anforderungs-Antwort-Zyklus im Knoten haben, wenn auch nicht sehr detailliert. Es beginnt damit, dass Sie eine HTTP-Anfrage für eine bestimmte Ressource stellen, und endet, wenn Sie eine Antwort an den Benutzer zurücksenden, dh wenn Sie auf etwas wie res.send ('Hello World') stoßen.
Schauen wir uns ein sehr einfaches Beispiel an.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Hier brauchen wir next () nicht, da resp.send den Zyklus beendet und die Steuerung an die Route Middleware zurückgibt.
Schauen wir uns nun ein anderes Beispiel an.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Hier haben wir 2 Middleware-Funktionen für den gleichen Pfad. Aber Sie werden immer die Antwort vom ersten bekommen. Da dies zuerst im Middleware-Stack bereitgestellt wird und res.send den Zyklus beendet.
Aber was ist, wenn wir immer nicht die "Hallo Welt !!!!" wollen? Antwort zurück. Für einige Bedingungen möchten wir vielleicht den "Hallo Planeten !!!!" Antwort. Lassen Sie uns den obigen Code ändern und sehen, was passiert.
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Was ist next
hier los ? Und ja, Sie könnten Gusses haben. Wenn die Bedingung erfüllt ist, wird die erste Middleware-Funktion übersprungen und die nächste Middleware-Funktion aufgerufen, und Sie erhalten die "Hello Planet !!!!"
Antwort.
Übergeben Sie das Steuerelement als Nächstes an die nächste Funktion im Middleware-Stack.
Was ist, wenn die erste Middleware-Funktion keine Antwort zurücksendet, sondern eine Logik ausführt und Sie die Antwort von der zweiten Middleware-Funktion zurückerhalten.
So etwas wie unten: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
In diesem Fall müssen beide Middleware-Funktionen aufgerufen werden. Der einzige Weg, um zur zweiten Middleware-Funktion zu gelangen, ist der Aufruf von next ().
Was ist, wenn Sie nicht den nächsten Anruf tätigen? Erwarten Sie nicht, dass die zweite Middleware-Funktion automatisch aufgerufen wird. Nach dem Aufrufen der ersten Funktion bleibt Ihre Anfrage hängen. Die zweite Funktion wird niemals aufgerufen und Sie erhalten keine Antwort zurück.
res.send
, um die Anforderung abzuschließen , wenn sie vorhanden ist . Wenn es nicht vorhanden ist, gibt es wahrscheinlich einen anderen Handler, der einen Fehler ausgibt und die Anforderung dann abschließt.