2013-03-24 5 views
138

Ich bin etwas neu zu Express und node.js, und ich kann den Unterschied zwischen app.use und app.get nicht herausfinden. Es scheint, als ob Sie beide verwenden können, um Informationen zu senden. Zum Beispiel:Unterschied zwischen app.use und app.get in express.js

app.use('/',function(req, res,next) { 
    res.send('Hello'); 
    next(); 
}); 

scheint das gleiche wie dies zu sein:

app.get('/', function (req,res) { 
    res.send('Hello'); 
}); 
+1

Sieht aus wie Sie drei verschiedene Antworten bekommen, die alle etwas zum Thema beitragen :) Hier ist eine verwandte Frage http://StackOverflow.com/Questions/11321635/Node-JS-express-what-is-app-use –

+0

ja, alle guten Antworten. Danke, ich schaue mir das an. –

Antwort

140

app.use() ist für die Bindung middleware an Ihre Anwendung vorgesehen. Die path ist ein „montieren“ oder „Präfix“ Pfad und begrenzt die Middleware nur auf alle Pfade gelten beantragt, dass mit ihm beginnen. Es kann sogar verwendet werden, eine andere Anwendung einbetten:

// subapp.js 
var express = require('express'); 
var app = modules.exports = express(); 
// ... 
// server.js 
var express = require('express'); 
var app = express(); 

app.use('/subapp', require('./subapp')); 

// ... 

Durch die Angabe / als „montieren“ -Pfad app.use() auf einen Pfad reagieren, die mit / beginnt, die alle von ihnen sind und unabhängig der HTTP-verb verwendet:

  • GET /
  • PUT /foo
  • POST /foo/bar
  • usw.

app.get(), auf der anderen Seite, einen Teil des Express' application routing ist und zur Anpassung und Handhabung einer bestimmte Route bestimmt, wenn es mit dem GET HTTP-Verb angefordert:

  • GET /

Und das äquivalente Routing für Ihr Beispiel von app.use() wäre tatsächlich:

app.all(/^\/.*/, function (req, res) { 
    res.send('Hello'); 
}); 
+2

Kudos für die Erwähnung eingebetteter Apps. Es ist eine sehr praktische Möglichkeit, Express-Middleware zu organisieren. – wprl

+4

Ist es fair zu sagen, dass app.use alles von app.get, app.post, app.put tun kann, aber nicht umgekehrt? – ngungo

+0

immer noch schwer zu verstehen. – Jeb50

19

app.get aufgerufen, wenn die HTTP method zu GET gesetzt ist, wohingegen app.use unabhängig von der HTTP-Methode aufgerufen wird, und definiert daher ein Ebene, die über allen anderen REST-Typen liegt, auf die Sie mit den Express-Paketen zugreifen können.

+0

guter Zusatz zu verwenden(). – Jeb50

30

app.use ist der „unteren Ebene“ -Methode von Connect, der Middleware-Framework, das Express abhängt.

Hier ist meine Leitlinie:

  • Verwenden app.get, wenn Sie eine GET-Methode verfügbar machen möchten.
  • Verwenden Sie app.use, wenn Sie Middleware hinzufügen möchten (ein Handler für die HTTP-Anforderung, bevor sie auf den Routen ankommt, die Sie in Express eingerichtet haben) oder wenn Sie Ihre Routen modularisieren möchten (z. B. Expose) eine Reihe von Routen von einem npm-Modul, die andere Web-Anwendungen verwenden könnten).
+0

Aber wenn mich die Methode nicht interessiert, kann ich 'app.use' verwenden, um einige Routen zu bearbeiten? Oder wir sollten 'app.use' niemals für das Routing verwenden. – Elemento0

+0

Sie können app.use verwenden, um Ihre Routen in separate Dateien zu verschieben. users.js, buildings.js –

+0

obwohl die eine Antwort darüber mehr UP/AGREE gesammelt hat, übersetzt Ihre Antwort anspruchsvolle Sache einschließlich Middleware in ein paar einfache Wörter, Kudo. – Jeb50

23

Einfach app.use bedeutet „diese laufen auf allen Anfragen“
app.get bedeutet „diese Anforderung auf einem GET Run, für die gegebene URL“

Verwandte Themen