Prima di capire next
, devi avere una piccola idea del ciclo Richiesta-Risposta nel nodo, anche se non molto nei dettagli. Inizia con una richiesta HTTP per una particolare risorsa e termina quando rispedisci una risposta all'utente, ad esempio quando incontri qualcosa come res.send ('Hello World');
diamo un'occhiata a un esempio molto semplice.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Qui non è necessario next (), poiché resp.send termina il ciclo e restituisce il controllo al middleware di route.
Ora diamo un'occhiata a un altro esempio.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Qui abbiamo 2 funzioni middleware per lo stesso percorso. Ma otterrai sempre la risposta dal primo. Perché quello viene montato per primo nello stack del middleware e res.send terminerà il ciclo.
E se non volessimo sempre il "Hello World !!!!" risposta indietro. Per alcune condizioni potremmo volere il "Hello Planet !!!!" risposta. Modifichiamo il codice sopra e vediamo cosa succede.
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 !!!!");
});
Cosa ci next
fa qui. E sì, potresti avere dei problemi. Salterà la prima funzione middleware se la condizione è vera e invocherà la successiva funzione middleware e avrai la "Hello Planet !!!!"
risposta.
Quindi, passa successivamente il controllo alla funzione successiva nello stack del middleware.
Che cosa succede se la prima funzione middleware non restituisce alcuna risposta ma esegue una parte logica e quindi si ottiene la risposta dalla seconda funzione middleware.
Qualcosa come sotto: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
In questo caso sono necessarie entrambe le funzioni del middleware per essere invocate. Quindi, l'unico modo per raggiungere la seconda funzione middleware è chiamare next ();
Che cosa succede se non si effettua una chiamata al prossimo. Non aspettatevi che la seconda funzione del middleware venga invocata automaticamente. Dopo aver richiamato la prima funzione, la tua richiesta verrà lasciata in sospeso. La seconda funzione non verrà mai invocata e non verrà restituita la risposta.
res.send
per completare la richiesta. Se non esiste, è probabile che esista un altro gestore che emetterà un errore e completerà la richiesta.