Ci sono 3 differenze principali che ho riscontrato fino ad ora. Il terzo non è così ovvio e potresti trovarlo interessante. Le differenze sono le stesse per l'espresso router
. Ciò significa router.use()
e router.get()
o di altro post
, put
, all
metodi, ecc ha anche stessa differenza.
1
app.use(path, callback)
risponderà a qualsiasi richiesta HTTP.
app.get(path, callback)
risponderà solo alla GET
richiesta HTTP. Allo stesso modo, post
, put
, ecc risponderà alla loro richiesta corrispondente. app.all()
risponde a qualsiasi richiesta HTTP così app.use()
e app.all()
sono gli stessi in questa parte.
2
app.use(path, callback)
corrisponderà al prefisso del percorso della richiesta e risponde se un qualsiasi prefisso del percorso della richiesta corrisponde al parametro del percorso. Ad esempio se il parametro path è "/"
, allora sarà corrispondenti "/"
, "/about"
, "/users/123"
etc.
app.get(path, callback)
Qui get corrisponderà all'intero percorso. Lo stesso per altre richieste HTTP e app.all()
. Ad esempio, se il parametro path è "/"
, allora corrisponderà solo "/"
.
3
next('route')
non funziona sulle funzioni middleware / callback di app.use()
. Funziona solo su app.get()
, app.all()
e l'altra funzione analoga di altre richieste HTTP.
Secondo la documentazione espressa :
next ('route') funzionerà solo nelle funzioni middleware che sono state caricate utilizzando le funzioni app.METHOD () o router.METHOD ().
METHOD è il metodo HTTP della richiesta che la funzione middleware gestisce (come GET, PUT o POST) in lettere minuscole.
Da qui useremo la parola chiave METODO invece get
, post
, all
, ecc
Ma che cosa è next('route')
?!
Vediamo.
successivo ('route')
vediamo, app.use()
o app.METHOD()
può richiedere diverse funzioni di callback / middleware.
Dalla documentazione espressa :
Le funzioni middleware sono funzioni che hanno accesso all'oggetto richiesta (req), all'oggetto risposta (res) e alla successiva funzione middleware nel ciclo richiesta-risposta dell'applicazione. La successiva funzione middleware è comunemente indicata da una variabile denominata next.
Se la funzione middleware corrente non termina il ciclo richiesta-risposta, deve chiamare next () per passare il controllo alla funzione middleware successiva. In caso contrario, la richiesta verrà lasciata in sospeso.
Quindi vediamo che ogni funzione middleware deve chiamare la successiva funzione middleware o terminare la risposta. E questo è lo stesso per app.use()
e app.METHOD()
.
Ma a volte, in alcune condizioni, potresti voler saltare tutte le successive funzioni di callback per la rotta corrente ma anche non voler terminare la risposta adesso. Perché forse ci sono altri percorsi che dovrebbero essere abbinati. Quindi, per saltare tutte le funzioni di callback del percorso corrente senza terminare la risposta, puoi eseguire next('route')
. Salterà tutte le funzioni di richiamata della rotta corrente e cercherà di abbinare le rotte successive.
Ad esempio (dalla documentazione espressa ):
app.get('/user/:id', function (req, res, next) {
if (req.params.id === '0') next('route')
else next()
}, function (req, res, next) {
res.send('regular')
})
app.get('/user/:id', function (req, res, next) {
res.send('special')
})
Vedi, qui in una certa condizione (req.params.id === '0')
vogliamo saltare la prossima funzione di callback ma non vogliamo nemmeno terminare la risposta perché c'è un'altra rotta dello stesso parametro di percorso che verrà abbinata e quella rotta invierà una risposta speciale. (Sì, è valido utilizzare lo stesso parametro di percorso per lo stesso METHOD
più volte. In questi casi, tutte le rotte verranno abbinate fino al termine della risposta). Quindi, in questi casi, eseguiamo il next('route')
e tutta la funzione di callback della rotta corrente viene saltata. Qui se la condizione non è soddisfatta, chiamiamo la successiva funzione di callback.
Questo next('route')
comportamento è possibile solo nelle app.METHOD()
funzioni.
Richiamando dalla documentazione espressa :
next ('route') funzionerà solo nelle funzioni middleware che sono state caricate utilizzando le funzioni app.METHOD () o router.METHOD ().
Poiché non è possibile saltare tutte le funzioni di callback della rotta corrente in app.use()
, dovremmo stare attenti qui. Dovremmo usare solo le funzioni middleware in app.use()
cui non è necessario saltare in nessuna condizione. Poiché dobbiamo terminare la risposta o attraversare tutte le funzioni di callback dall'inizio alla fine, non possiamo saltarle affatto.
Puoi visitare qui per ulteriori informazioni