Jestem trochę nowy do wyrażenia i node.js i nie mogę zrozumieć różnicy między app.use i app.get. Wygląda na to, że możesz użyć obu z nich do wysyłania informacji. Na przykład:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
wydaje się być taki sam:
app.get('/', function (req,res) {
res.send('Hello');
});
Odpowiedzi:
app.use()
jest przeznaczony do wiązania oprogramowania pośredniego z aplikacją. Jestpath
to ścieżka „ montowania ” lub „ prefiksu ” i ogranicza oprogramowanie pośrednie do stosowania tylko do żądanych ścieżek, które zaczynają się od niego. Można go nawet użyć do osadzenia innej aplikacji:Określając
/
jako ścieżkę „ mount ”,app.use()
odpowie na każdą ścieżkę, która zaczyna się od/
, które są wszystkie i niezależnie od użytego czasownika HTTP:GET /
PUT /foo
POST /foo/bar
app.get()
, z drugiej strony, jest częścią routingu aplikacji Express i jest przeznaczony do dopasowywania i obsługi określonej trasy na żądanieGET
czasownika HTTP:GET /
Odpowiednim routingiem dla Twojego przykładu
app.use()
byłoby:( Aktualizacja: Próba lepszego wykazania różnic. )
Metody routingu, w tym
app.get()
, są wygodnymi metodami, które pomagają precyzyjniej dopasowywać odpowiedzi na żądania. Dodają także obsługę takich funkcji, jak parametry inext('route')
.Wewnątrz każdego
app.get()
jest wezwanie doapp.use()
, więc z pewnością możesz to wszystko zrobićapp.use()
bezpośrednio. Ale zrobienie tego często będzie wymagało (prawdopodobnie niepotrzebnie) zaimplementowania różnych ilości kodu płyty głównej.Przykłady:
W przypadku prostych, statycznych tras:
vs.
Z wieloma modułami obsługi dla tej samej trasy:
vs.
Z parametrami:
vs.
źródło
path-to-regexp
ani nic i możesz użyć parametrów trasy bezpośrednio w pierwszym argumencieuse
metody.app.use
jest metodą „niższego poziomu” firmy Connect, frameworka oprogramowania pośredniego, od którego zależy Express.Oto moja wskazówka:
app.get
jeśli chcesz ujawnić metodę GET.app.use
jeśli chcesz dodać oprogramowanie pośrednie (moduł obsługi żądania HTTP, zanim dotrze ono do tras skonfigurowanych w Express) lub jeśli chcesz, aby Twoje trasy były modułowe (na przykład ujawnij zestaw tras z modułu npm, z którego mogłyby korzystać inne aplikacje internetowe).źródło
app.use
niektórych tras? Lub nigdy nie powinniśmy używaćapp.use
do routingu.Po prostu app.use oznacza „Uruchom to na WSZYSTKICH żądaniach”
app.get oznacza „Uruchom to na żądanie GET dla danego adresu URL”
źródło
app.get
jest wywoływany, gdy metoda HTTP jest ustawiona naGET
, natomiastapp.use
jest wywoływana niezależnie od metody HTTP, a zatem definiuje warstwę, która jest na wierzchu wszystkich innych typów RESTful, do których dostęp mają pakiety ekspresowe.źródło
Różnica między
app.use
&app.get
:app.use
→ Zasadniczo służy do wprowadzania oprogramowania pośredniego w aplikacji i może obsługiwać wszystkie typy żądań HTTP.app.get
→ Służy tylko do obsługi żądań GET HTTP.Teraz istnieje pomieszanie między
app.use
&app.all
. Bez wątpienia jest w nich jedna wspólna cecha: obie mogą obsługiwać wszelkiego rodzaju żądania HTTP. Ale istnieją pewne różnice, które zalecają nam używanie app.use do oprogramowania pośredniego i app.all do obsługi tras.app.use()
→ Zajmuje tylko jedno oddzwonienie.app.all()
→ Może to obejmować wiele połączeń zwrotnych.app.use()
zobaczy tylko, czy adres URL zaczyna się od określonej ścieżki.Ale
app.all()
dopasuje pełną ścieżkę.Na przykład,
next()
zadzwoń wewnątrzapp.use()
zadzwoni albo kolejnej warstwy pośredniej ani żadnej obsługi trasy, alenext()
rozmowa wewnątrzapp.all()
wywoła kolejną obsługi trasy (app.all()
,app.get/post/put...
etc.) tylko. Jeśli pojawi się jakieś oprogramowanie pośrednie, zostanie ono pominięte. Dlatego wskazane jest, aby umieścić wszystkie oprogramowanie pośrednie zawsze powyżej procedur obsługi trasy.źródło
next()
wewnątrzapp.all('/*', ...)
spowoduje wykonanieapp.use('/', ...)
później w pliku. Może źle cię tam zrozumiałem. Bardzo pomocne wyjaśnienie inaczej.Oprócz powyższych wyjaśnień, czego doświadczam:
dopasuje wszystkie żądania zaczynające się od „/ book” jako URL. więc pasuje również do „/ book / 1” lub „/ book / 2”
dopasowuje tylko żądanie GET z dopasowaniem ścisłym . Nie obsługuje adresów URL takich jak „/ book / 1” lub „/ book / 2”
Tak więc, jeśli chcesz mieć globalny moduł obsługi, który obsługuje wszystkie twoje trasy,
app.use('/')
jest to opcja.app.get('/')
obsłuży tylko główny adres URL.źródło