Zaczynam od NodeJS i Express 4 i jestem trochę zdezorientowany. Czytałem witrynę Express, ale nie widzę, kiedy należy używać procedury obsługi trasy, ani kiedy express.Router
.
Jak mogłem zobaczyć, jeśli chcę wyświetlić stronę lub coś, gdy użytkownik trafi /show
na przykład, powinienem użyć:
var express = require('express')
var app = express()
app.get("/show", someFunction)
Na początku myślałem, że to stary (dla Express 3). Czy to prawda, czy tak też jest w przypadku Express 4?
Jeśli tak to robi w Expressie 4, do czego express.Router
służy?
Czytam prawie taki sam przykład jak powyżej, ale używam express.Router
:
var express = require('express');
var router = express.Router();
router.get("/show", someFunction)
Jaka jest różnica między oboma przykładami?
Z którego powinienem skorzystać, jeśli chcę po prostu zrobić prostą stronę testową?
Router
nie.listen()
dotyczy wniosków samodzielnie. Przydaje się do rozdzielenia aplikacji na wiele modułów - tworzeniaRouter
w nichapp
puszkirequire()
i.use()
jako oprogramowania pośredniego.app.get(..)
składnia jest tylko skrótem, który ułatwia pracę z nimexpress.router
. Jeśli dopiero zaczynasz, nie martw się o specyfikę routera.app's
własne metody routingu, takie jakapp.get()
, są wystarczające dla twoich potrzeb, skorzystaj z nich.Router
Właśnie tam dla wygody, aby pomóc Ci zorganizować aplikację na wielu modułów. Z przewodnika : „ Za pomocą tejexpress.Router
klasy można tworzyć modułowe moduły obsługi tras.Router
Instancja jest kompletnym oprogramowaniem pośredniczącym i systemem routingu; z tego powodu jest często nazywana„ mini-aplikacją ”. ”Odpowiedzi:
app.js
dogs.js
Po
var app = express()
wywołaniu zwracany jest obiekt aplikacji. Pomyśl o tym jako o głównej aplikacji .Po
var router = express.Router()
wywołaniu zwracana jest nieco inna mini aplikacja . Idea mini-aplikacji polega na tym, że każda trasa w Twojej aplikacji może stać się dość skomplikowana i możesz skorzystać z przeniesienia całego tego kodu do osobnego pliku. Router każdego pliku staje się mini-aplikacją , która ma bardzo podobną strukturę do głównej aplikacji .W powyższym przykładzie kod trasy / Dogs został przeniesiony do własnego pliku, aby nie zaśmiecał głównej aplikacji . Kod dla / cats i / birds miałby podobną strukturę w swoich własnych plikach. Dzieląc ten kod na trzy mini-aplikacje , możesz pracować nad logiką dla każdej z nich osobno i nie martwić się, jak wpłynie ona na pozostałe dwie.
Jeśli masz kod (oprogramowanie pośrednie), który dotyczy wszystkich trzech tras, możesz umieścić go w głównej aplikacji przed
app.use(...)
połączeniami. Jeśli masz kod (oprogramowanie pośrednie), który dotyczy tylko jednej z tych tras, możesz umieścić go w pliku tylko dla tej trasy.źródło
app.use('/dogs', dogs)(app)
ponieważ definiujesz tam trasy, dodatkowo (i popraw mnie, jeśli się mylę), jeśli zrobisz to w ten sposób, w aplikacji znajduje się wcześniej całe oprogramowanie pośrednie a dodatkowe oprogramowanie pośrednie zostanie dodane do obiektu aplikacji (zakładając, że więcej oprogramowania pośredniego znajduje się na trasie psów). jeśliroute.get('/dogs', route)
go użyjesz , przekaże tylko oprogramowanie pośrednie do obiektu aplikacji podczas interakcji z trasami zdefiniowanymi w tym routerze, a jeśli zakres aplikacji jest poza trasą, nie będzie miał dostępu do tego oprogramowania pośredniego.app.use('/dogs', show)
. W ten sposób trasa jest niezależna od aplikacji i może być ponownie użyta w dowolnej aplikacji Express. Oprogramowanie pośrednie umieszczone gdziekolwiek, zanim trasa zostanie wykorzystana przez tę trasę. Jeśli umieścisz oprogramowanie pośrednie ponad wszystkimi trasami w app.js, wówczas wszystkie trasy będą korzystać z tego oprogramowania pośredniego. Jeśli umieścisz oprogramowanie pośrednie w pliku trasy (dogs.js), wykorzysta go tylko ta trasa. Jeśli umieścisz oprogramowanie pośrednie za trasą GET w psach.js, będzie z niego korzystać tylko trasa POST (o ile zakończy się odpowiedzią).app.get('/dogs'dogs,)(app)
ponieważ pytanie dotyczyło funkcji get app.get i route.get. pokazywałeś, jak oddzielić trasy, aby można było nimi zarządzać. Ale czy moja anakdota nie byłaby poprawna, jeśli mówimyapp.get
? Jeśli mogę dostać się na PC, zmienię mój powyższy komentarz.Router
sam nie.listen()
przyjmuje wniosków”. To może być główna różnica.Express 4.0 jest dostarczany z nowym routerem. Jak wspomniano na stronie:
Jest dobry artykuł na https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4, który opisuje różnice i co można zrobić z routerami.
Podsumowując
Za pomocą routerów możesz łatwiej modulować kod. Możesz używać routerów jako:
Uwaga:
app.router
Obiektu, który został usunięty w Express 4, jest wykonany na powrót w Express, 5. W nowej wersji jest to odniesienie do podstawowej routera Express Express, w przeciwieństwie do 3, w którym aplikacja miał wyraźnie załadowaniem.źródło
Jak w powyższym przykładzie, możemy dodać inną metodę żądania HTTP w ramach trasy.
źródło
Powiedzmy, że twoja aplikacja jest mało złożona. Najpierw dzielimy aplikację na wiele modułów, aby zmiany w jednym module nie zaśmiecały innych i można było kontynuować pracę nad poszczególnymi modułami, ale pod koniec dnia trzeba zintegrować wszystko w jeden, ponieważ budują jedną aplikację. To tak, jakbyśmy mieli jedną główną aplikację i kilka aplikacji potomnych, których rodzic jest główną aplikacją. Kiedy tworzymy aplikację nadrzędną, tworzymy ją za pomocą
Do tej aplikacji nadrzędnej musimy wprowadzić aplikacje podrzędne. Ponieważ jednak aplikacje potomne nie są całkowicie różnymi aplikacjami (ponieważ działają w tym samym kontekście kontekstu java), express zapewnia sposób na wykonanie tego za pomocą funkcji routera Expresse, a to właśnie robimy w pliku każdego modułu potomnego i pozwala wywołać jeden taki moduł potomny jak aboutme .
Przez module.exports udostępniamy ten moduł innym użytkownikom do wykorzystania, a ponieważ mamy zmodularyzowane elementy, musimy udostępnić pliki modułów aplikacji nadrzędnej za pomocą funkcji wymagającej węzła, podobnie jak inne moduły innych firm, a plik nadrzędny wygląda coś takiego.
po tym, jak udostępnimy ten moduł potomny rodzicowi, musimy powiedzieć aplikacji macierzystej, kiedy należy użyć tej aplikacji potomnej. Powiedzmy, że kiedy użytkownik natrafi na ścieżkę o mnie, potrzebujemy aplikacji potomnej o mnie, aby obsłużyć żądanie i robimy to za pomocą metody użycia Expresse .
i w jednym ujęciu plik macierzysty wygląda tak
Przede wszystkim, co rodzic może zrobić, to uruchomić serwer, na którym dziecko nie może. Mam nadzieję, że to wyjaśnia. Aby uzyskać więcej informacji, zawsze możesz zajrzeć do kodu źródłowego, co zajmuje trochę czasu, ale daje dużo informacji. Dziękuję Ci.
źródło
parent.use('/aboutme', child)
?używanie app.js do pisania tras oznacza, że są one dostępne dla wszystkich użytkowników, ponieważ app.js jest ładowany podczas uruchamiania aplikacji. Jednak umieszczanie tras w mini. express.router () chroni i ogranicza ich dostępność.
źródło
express.Router
ma wiele opcji:/show
trasa ma nie być taka sama jak/Show
, to zachowanie jest domyślnie wyłączone/show/
kieruj na nie to samo, co/show
to zachowanie jest również domyślnie wyłączoneźródło
Jednym słowem,
express.Router
można zrobić więcej rzeczy w porównaniu doapp.get()
, takich jak oprogramowanie pośrednie, ponadto można zdefiniować jeszcze jeden obiekt routera za pomocąexpress.Router()
źródło