Il y a 3 différences principales que j'ai trouvées jusqu'à présent. La troisième n'est pas si évidente et vous la trouverez peut-être intéressante. Les différences sont les mêmes pour l'express router
. Cela signifie router.use()
y router.get()
ou autre post
, put
, all
etc. ont également la même différence.
1
-
app.use(path, callback)
répondra à toute requête HTTP.
-
app.get(path, callback)
ne répondra qu'aux GET
Demande HTTP. De la même manière, post
, put
etc. répondront à leur demande correspondante. app.all()
répond à toute demande HTTP de manière app.use()
y app.all()
sont les mêmes dans cette partie.
2
-
app.use(path, callback)
correspondra au préfixe du chemin de la demande et répondra si un préfixe du chemin de la demande correspond au paramètre du chemin. Par exemple, si le paramètre du chemin est "/"
alors il correspondra à "/"
, "/about"
, "/users/123"
etc.
-
app.get(path, callback)
Ici, get correspondra à l'ensemble du chemin. Idem pour les autres requêtes HTTP et app.all()
. Par exemple, si le paramètre du chemin est "/"
alors il ne correspondra qu'à "/"
.
3
next('route')
n'a pas de travailler sur les fonctions d'intergiciel/de rappel de l'entreprise. app.use()
. Il ne fonctionne que sur app.get()
, app.all()
et d'autres fonctions similaires d'autres demandes HTTP.
Selon documentation expresse :
next('route') ne fonctionnera que dans les fonctions middleware qui ont été chargées en utilisant les fonctions app.METHOD() ou router.METHOD().
METHOD est la méthode HTTP de la requête que la fonction middleware traite (comme GET, PUT ou POST) en minuscules.
À partir de maintenant, nous utiliserons le mot-clé METHOD au lieu de get
, post
, all
etc.
Mais qu'est-ce que next('route')
? !
Voyons voir.
next('route')
nous voyons, app.use()
o app.METHOD()
peut prendre plusieurs fonctions de rappel/middleware.
De la documentation expresse :
Les fonctions d'intergiciel sont des fonctions qui ont accès à l'objet de requête (req), à l'objet de réponse (res) et à la fonction d'intergiciel suivante dans le cycle requête-réponse de l'application. La fonction intermédiaire suivante est généralement désignée par une variable nommée next.
Si la fonction middleware actuelle ne termine pas le cycle demande-réponse, elle doit appeler next() pour passer le contrôle à la fonction middleware suivante. Sinon, la demande sera laissée en suspens.
Nous voyons donc que chaque fonction middleware doit soit appeler la fonction middleware suivante, soit terminer la réponse. Et c'est la même chose pour app.use()
y app.METHOD()
.
Mais parfois, dans certaines conditions, vous pouvez vouloir sauter toutes les fonctions de rappel suivantes pour la route actuelle, mais vous ne voulez pas non plus terminer la réponse maintenant. Parce qu'il y a peut-être d'autres itinéraires à faire correspondre. Donc, pour sauter toutes les fonctions de rappel de l'itinéraire actuel sans terminer la réponse, vous pouvez exécuter next('route')
. Il sautera toutes les fonctions de rappel de la route actuelle et cherchera à correspondre aux routes suivantes.
Par exemple (Extrait de la documentation express ):
app.get('/user/:id', function (req, res, next) {
// if the user ID is 0, skip to the next route
if (req.params.id === '0') next('route')
// otherwise pass the control to the next middleware function in this stack
else next()
}, function (req, res, next) {
// send a regular response
res.send('regular')
})
// handler for the /user/:id path, which sends a special response
app.get('/user/:id', function (req, res, next) {
res.send('special')
})
Tu vois, ici, dans une certaine condition (req.params.id === '0')
nous voulons sauter la fonction de rappel suivante, mais nous ne voulons pas non plus terminer la réponse parce qu'il y a une autre route avec le même paramètre de chemin qui va correspondre et cette route va envoyer une réponse spéciale. (Oui, il est valide d'utiliser le même paramètre de chemin pour la même METHOD
plusieurs fois. Dans de tels cas, toutes les routes seront appariées jusqu'à la fin de la réponse). Donc, dans de tels cas, nous exécutons la commande next('route')
et toutes les fonctions de rappel de l'itinéraire actuel sont ignorées. Ici, si la condition n'est pas remplie, nous appelons la fonction de rappel suivante.
Este next('route')
n'est possible que dans le app.METHOD()
fonctions.
Rappelant de documentation expresse :
next('route') ne fonctionnera que dans les fonctions middleware qui ont été chargées en utilisant les fonctions app.METHOD() ou router.METHOD().
Puisque sauter toutes les fonctions de rappel de l'itinéraire actuel est pas possible dans app.use()
nous devrions être prudents ici. Nous ne devons utiliser les fonctions de l'intergiciel que dans app.use()
qui ne doit pas être sautée dans n'importe quelle condition. Comme nous devons soit terminer la réponse, soit parcourir toutes les fonctions de rappel du début à la fin, nous ne pouvons absolument pas les sauter.
Vous pouvez visiter ici pour plus d'informations