Ich bin etwas neu in express und node.js und kann den Unterschied zwischen app.use und app.get nicht herausfinden. Anscheinend können Sie beide zum Senden von Informationen verwenden. Beispielsweise:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
scheint dasselbe zu sein:
app.get('/', function (req,res) {
res.send('Hello');
});
Antworten:
app.use()
dient zum Binden von Middleware an Ihre Anwendung. Diespath
ist ein " Mount " - oder " Präfix " -Pfad und beschränkt die Middleware darauf, nur auf alle angeforderten Pfade anzuwenden, die damit beginnen . Es kann sogar verwendet werden, um eine andere Anwendung einzubetten:Wenn Sie
/
einen " Mount " -Pfad angeben,app.use()
wird auf jeden Pfad reagiert, der mit beginnt/
, und zwar alle und unabhängig vom verwendeten HTTP-Verb:GET /
PUT /foo
POST /foo/bar
app.get()
Andererseits ist es Teil des Anwendungsroutings von Express und dient zum Abgleichen und Behandeln einer bestimmten Route, wenn dies mit demGET
HTTP-Verb angefordert wird :GET /
Und das äquivalente Routing für Ihr Beispiel
app.use()
wäre tatsächlich:( Update: Versuch, die Unterschiede besser zu demonstrieren. )
Die Routing-Methoden, einschließlich
app.get()
, sind praktische Methoden, mit denen Sie Antworten auf Anforderungen genauer ausrichten können. Sie unterstützen auch Funktionen wie Parameter undnext('route')
.In jedem
app.get()
ist ein Aufruf anapp.use()
, so dass Sie all dies sicherlichapp.use()
direkt mit tun können. Dies erfordert jedoch häufig (wahrscheinlich unnötig) die Neuimplementierung verschiedener Mengen von Boilerplate-Code.Beispiele:
Für einfache, statische Routen:
vs.
Mit mehreren Handlern für dieselbe Route:
vs.
Mit Parametern:
vs.
quelle
path-to-regexp
nichts mehr und Sie können Routenparameter direkt im ersten Argument deruse
Methode verwenden.app.use
ist die "Lower Level" -Methode von Connect, dem Middleware-Framework, von dem Express abhängt.Hier ist meine Richtlinie:
app.get
Sie diese Option, wenn Sie eine GET-Methode verfügbar machen möchten.app.use
Sie diese Option, wenn Sie Middleware hinzufügen möchten (einen Handler für die HTTP-Anforderung, bevor sie zu den in Express eingerichteten Routen gelangt) oder wenn Sie Ihre Routen modular gestalten möchten (z. B. eine Reihe von Routen verfügbar machen möchten) von einem npm-Modul, das andere Webanwendungen verwenden könnten).quelle
app.use
, um einige Routen zu handhaben? Oder wir sollten niemalsapp.use
für das Routing verwenden.Einfach app.use bedeutet "Bei ALLEN Anfragen
ausführen ". App.get bedeutet "Bei einer GET-Anfrage für die angegebene URL ausführen".
quelle
app.get
wird aufgerufen, wenn die HTTP-Methode auf gesetzt istGET
, währendapp.use
sie unabhängig von der HTTP-Methode aufgerufen wird, und definiert daher eine Ebene, die über allen anderen RESTful-Typen liegt, auf die Sie mit den Express-Paketen zugreifen können.quelle
Unterschied zwischen
app.use
&app.get
:app.use
→ Es wird im Allgemeinen zum Einführen von Middleware in Ihre Anwendung verwendet und kann alle Arten von HTTP-Anforderungen verarbeiten.app.get
→ Es ist nur für die Verarbeitung von GET HTTP-Anforderungen vorgesehen.Nun gibt es eine Verwechslung zwischen
app.use
&app.all
. Zweifellos haben sie eines gemeinsam: Beide können alle Arten von HTTP-Anforderungen verarbeiten. Es gibt jedoch einige Unterschiede, die uns empfehlen, app.use für Middleware und app.all für die Routenbehandlung zu verwenden.app.use()
→ Es dauert nur einen Rückruf.app.all()
→ Es können mehrere Rückrufe erforderlich sein.app.use()
wird nur sehen, ob die URL mit dem angegebenen Pfad beginnt.Aber,
app.all()
wird den vollständigen Pfad entspricht.Beispielsweise,
next()
rufen Sie innerhalb derapp.use()
entweder die nächste Middleware oder jede Route - Handler aufrufen, abernext()
Anruf innenapp.all()
wird die nächste Route Handler (aufrufenapp.all()
,app.get/post/put...
etc.) nur. Wenn danach Middleware vorhanden ist, wird diese übersprungen. Es ist daher ratsam, alle Middlewares immer über den Routenführern zu platzieren.quelle
next()
innerhalb vonapp.all('/*', ...)
will aufrufen, wird in der Tat einapp.use('/', ...)
späterer Vorgang in der Datei ausgeführt. Vielleicht habe ich dich dort falsch verstanden. Ansonsten sehr hilfreiche Erklärung.Zusätzlich zu den obigen Erklärungen erlebe ich Folgendes:
stimmt mit allen Anfragen überein, die mit '/ book' als URL beginnen. es passt also auch zu '/ book / 1' oder '/ book / 2'
Entspricht nur der GET-Anforderung mit der genauen Übereinstimmung . URLs wie '/ book / 1' oder '/ book / 2' werden nicht verarbeitet.
Wenn Sie also einen globalen Handler benötigen, der alle Ihre Routen verarbeitet,
app.use('/')
ist dies die Option.app.get('/')
behandelt nur die Root-URL.quelle