2013-03-24 8 views
138

Jestem trochę nowy, aby wyrazić i node.js, i nie mogę zrozumieć różnicy między app.use a app.get. Wygląda na to, że możesz użyć ich obu do wysyłania informacji. NpRóżnica między app.use a app.get w pliku express.js

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

wydaje się być taki sam jak to:

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

wygląda masz trzy różne odpowiedzi, wszystko przyczynianie się do tematu :) Oto powiązane pytanie http://stackoverflow.com/questions/11321635/node-js-express-what-is-app-use –

+0

tak, wszystkie dobre odpowiedzi. Dzięki, popatrzę na to. –

Odpowiedz

140

app.use() jest przeznaczony do wiązania middleware do wniosku. path jest „zamontować” lub „prefiks” ścieżka i ogranicza middleware zastosowanie tylko do jakichkolwiek ścieżek żądany że rozpocząć z nim. Może nawet być stosowane do osadzić inną aplikację:

// 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')); 

// ... 

Określając / jako „zamontować” ścieżka, app.use() przestanie reagować na ścieżkę, która rozpoczyna się /, które są z nimi i bez względu HTTP czasownik używany:

  • GET /
  • PUT /foo
  • POST /foo/bar
  • itp

app.get(), z drugiej strony, jest częścią Express' application routing i jest przeznaczony do dopasowania i obsługi konkretnej trasy na żądanie z czasownika GET http:

  • GET /

Odpowiednik trasy dla przykładu app.use() byłby rzeczywiście:

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

Kudos za wzmiankę o aplikacjach wbudowanych. Jest to bardzo przydatny sposób organizowania ekspresowego oprogramowania pośredniego. – wprl

+4

Czy można powiedzieć, że app.use może zrobić wszystko, co app.get, app.post, app.put, ale nie odwrotnie? – ngungo

+0

nadal trudne do zrozumienia. – Jeb50

19

app.get jest wywoływana gdy HTTP method jest ustawiony GET, natomiast app.use nazywa się niezależnie od sposobu HTTP, a zatem wyznacza warstwa, która znajduje się na szczycie wszystkich innych typów REST, do których pakiety ekspresowe dają dostęp.

+0

dobry dodatek do użycia(). – Jeb50

30

app.use jest „niższy poziom” metoda z Connect ramach middleware, które wyrażają zależy.

Oto moja wskazówka:

  • Zastosowanie app.get jeśli chcesz narazić metody GET.
  • Użyj app.use, jeśli chcesz dodać jakieś oprogramowanie pośrednie (program obsługi żądań HTTP, zanim dotrze on do tras skonfigurowanych w Express), lub jeśli chcesz, aby trasy były modułowe (na przykład zestaw tras z modułu npm, z którego mogłyby korzystać inne aplikacje internetowe).
+0

Ale jeśli nie dbam o metodę, mogę użyć 'app.use' do obsługi niektórych tras? Lub nigdy nie powinniśmy używać 'app.use' do routingu. – Elemento0

+0

Możesz użyć app.use, aby przenieść trasy do oddzielnych plików eq. users.js, buildings.js –

+0

chociaż jedna odpowiedź powyżej tego zgromadziła znacznie więcej UP/AGREE, twoja odpowiedź przekłada wyrafinowane rzeczy, w tym Middleware na kilka prostych słów, kudo. – Jeb50

23

Wystarczy app.use oznacza „Run to na wszystkie żądania”
app.get oznacza „Uruchom ten na żądanie GET, dla danego adresu URL”

Powiązane problemy