Ein wenig Interna hier. Der Hauptzweck von express
app
handle
Funktion ist es, eine Antwort an den Client zu senden und die request-response cycle
. Und die Beendigung dieses Zyklus kann durch eine der folgenden Maßnahmen erfolgen response methods
(z.B. res.end(), res.json(), usw.). Das heißt, wenn eine Middleware oder route handler
führt einige Aktionen aus, ruft dann aber nicht eine der response methods
oder die Kontrolle an den nächsten Handler oder die nächste Middleware weitergeben, wird die request-response cycle
wird nicht beendet. Aber was die next
hängt davon ab, wo und wie sie aufgerufen wird.
Zur Verwaltung verschiedener Aufgaben (Router, Middlewares) express
erstellt stacks
. Sie sehen aus wie ein queue
der tasks
. Jede router
y route
erstellt seine eigene stack
de tasks
;
En use
Methode der express
app
schiebt task
( middleware
Funktion) zum stack
der router
. Die app.get
, app.post
usw. wird eine separate route
(mit eigenem stack
und schiebt dazu den eigentlichen handlers
der route
) im router
und schiebt dann zum router
verpackt in einer Funktion, die route
Bearbeiter. Das heißt, wenn ein route
wird in der Datei router
stack
etwas wie route
task
(Wrapper-Funktion) mit subtasks
geschoben.
// pushes task to the router stack
app.use((req, res, next) => {
console.log('log request');
next();
});
// creates route, route stack,
// pushes tasks to the route stack,
// wraps tasks in a function (another task)
// pushes wrapper function to the
// router stack
app.get('/', (req, res, next) => {
res.send('Hello World');
});
Als route
hat seine eigene stack
aufrufen next
ohne die Argumente bringt uns nur zum nächsten Handler der route
:
app.get('/',
(req, res, next) => {
console.log('first handler');
// passes the control to the second handler
next();
},
(req, res, next) => {
console.log('second handler');
res.send('Hello World');
}
);
Aufruf von next
innerhalb einer middleware
( express
empfiehlt, sich zu bewerben use
Verfahren zur Montage eines middleware
) bringt uns zum nächsten route
o middleware
der router
Ursache middleware
(wenn er montiert ist) in den router
stack
.
next
akzeptiert verschiedene Argumente. Jedes Argument, das nicht 'route'
o 'router'
wird als Fehler behandelt und an den error
middleware
die nach allen Routen eingebaut werden müssen und vier Argumente haben:
// error handling middleware
app.use((error, req, res, next) => {
res.status(error.status || 500);
res.send(error.message || 'Server internal error');
});
Zeichenfolge 'route'
als Argument für next
überspringt alle verbleibenden route
handlers
und bringt uns die nächste route
der router
:
app.get('/',
(req, res, next) => {
console.log('first handler');
// passes control to the next route
next('route');
},
(req, res, next) => {
// this handler will be skipped
next();
}
);
app.get('/',
(req, res, next) => {
// this route will be called at the end
res.send('Hello World');
}
);
Zeichenfolge 'router'
als Argument für next
bringt uns raus aus der aktuellen router
:
// router 'one'
app.get('/',
(req, res, next) => {
console.log('first handler');
// passes control to the next router
next('router');
},
(req, res, next) => {
// this handler will be skipped
next();
}
);
// router 'two'
app.get('/',
(req, res, next) => {
// this route will be called at the end
res.send('Hello World');
}
);