Je suis un peu nouveau pour exprimer et node.js, et je ne peux pas comprendre la différence entre app.use et app.get. Il semble que vous puissiez utiliser les deux pour envoyer des informations. Par exemple:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
semble être le même que celui-ci:
app.get('/', function (req,res) {
res.send('Hello');
});
Réponses:
app.use()
est destiné à lier le middleware à votre application. Ilpath
s'agit d'un chemin de « montage » ou de « préfixe » et limite le middleware à ne s'appliquer qu'aux chemins demandés qui commencent par lui. Il peut même être utilisé pour intégrer une autre application:En spécifiant
/
comme chemin de « montage »,app.use()
répondra à tout chemin commençant par/
, qui sont tous et indépendamment du verbe HTTP utilisé:GET /
PUT /foo
POST /foo/bar
app.get()
, d'autre part, fait partie du routage d'application d'Express et est destiné à faire correspondre et à gérer un itinéraire spécifique lorsque demandé avec leGET
verbe HTTP:GET /
Et, le routage équivalent pour votre exemple
app.use()
serait en fait:( Mise à jour: Tenter de mieux démontrer les différences. )
Les méthodes de routage, notamment
app.get()
, sont des méthodes pratiques qui vous aident à aligner plus précisément les réponses aux demandes. Ils ajoutent également la prise en charge de fonctionnalités telles que les paramètres etnext('route')
.Dans chacun d'eux se
app.get()
trouve un appel àapp.use()
, donc vous pouvez certainement faire tout celaapp.use()
directement. Mais cela nécessitera souvent (probablement inutilement) la réimplémentation de diverses quantités de code passe-partout.Exemples:
Pour les itinéraires simples et statiques:
contre.
Avec plusieurs gestionnaires pour le même itinéraire:
contre.
Avec paramètres:
contre.
la source
path-to-regexp
rien et vous pouvez utiliser les paramètres de route directement dans le premier argument de lause
méthode.app.use
est la méthode "de niveau inférieur" de Connect, le framework middleware dont Express dépend.Voici ma ligne directrice:
app.get
si vous souhaitez exposer une méthode GET.app.use
si vous souhaitez ajouter un middleware (un gestionnaire pour la demande HTTP avant qu'elle n'arrive aux routes que vous avez configurées dans Express), ou si vous souhaitez rendre vos routes modulaires (par exemple, exposer un ensemble de routes à partir d'un module npm que d'autres applications Web pourraient utiliser).la source
app.use
pour gérer certains itinéraires? Ou nous ne devrions jamais utiliserapp.use
pour le routage.App.use signifie simplement «Exécuter ceci sur TOUTES les demandes»
app.get signifie «Exécuter ceci sur une demande GET, pour l'URL donnée»
la source
app.get
est appelé lorsque la méthode HTTP est définie surGET
, tandis qu'ilapp.use
est appelé quelle que soit la méthode HTTP, et définit donc une couche qui se trouve au-dessus de tous les autres types RESTful auxquels les packages express vous donnent accès.la source
Différence entre
app.use
&app.get
:app.use
→ Il est généralement utilisé pour introduire des middlewares dans votre application et peut gérer tout type de requêtes HTTP.app.get
→ C'est uniquement pour gérer les requêtes HTTP GET.Maintenant, il y a une confusion entre
app.use
&app.all
. Sans aucun doute, il y a une chose commune en eux, que les deux peuvent gérer toutes sortes de requêtes HTTP. Mais il existe certaines différences qui nous recommandent d'utiliser app.use pour les middlewares et app.all pour la gestion des itinéraires.app.use()
→ Cela ne prend qu'un seul rappel.app.all()
→ Cela peut prendre plusieurs rappels.app.use()
ne verra que si l'url commence par le chemin spécifié.Mais,
app.all()
correspondra au chemin complet.Par exemple,
next()
call insideapp.use()
va appeler soit le middleware suivant, soit n'importe quel gestionnaire de route, maisnext()
call insideapp.all()
invoquera uniquement le prochain gestionnaire de route (app.all()
,app.get/post/put...
etc.). S'il y a un middleware après, il sera ignoré. Il est donc conseillé de placer tous les middlewares toujours au-dessus des gestionnaires d'itinéraire.la source
next()
à l' intérieur deapp.all('/*', ...)
va en fait exécuter une versionapp.use('/', ...)
ultérieure du fichier. Peut-être que je vous ai mal compris là-bas. Explication très utile sinon.En plus des explications ci-dessus, ce que je vis:
correspondra à toutes les demandes commençant par '/ book' comme URL. il correspond donc également à '/ book / 1' ou '/ book / 2'
correspond uniquement à la demande GET avec correspondance exacte . Il ne gérera pas les URL comme '/ book / 1' ou '/ book / 2'
Donc, si vous voulez un gestionnaire global qui gère tous vos itinéraires,
app.use('/')
c'est l'option.app.get('/')
gérera uniquement l'URL racine.la source