Node.js / Express.js - Jak działa app.router?
Zanim zapytam oapp.router
Myślę, że powinienem wyjaśnić przynajmniej to, co myślę, że dzieje się podczas pracy z oprogramowaniem pośrednim. Aby użyć oprogramowania pośredniego, należy użyć funkcjiapp.use()
. Gdy oprogramowanie pośrednie jest wykonywane, albo wywoła następne oprogramowanie pośrednie, używającnext()
lub spraw, aby nie było wywoływane żadne oprogramowanie pośrednie. Oznacza to, że kolejność, w jakiej umieszczam wywołania oprogramowania pośredniego, jest ważna, ponieważ niektóre oprogramowanie pośrednie zależy od innego oprogramowania pośredniego, a niektóre oprogramowanie pośrednie pod koniec może nawet nie zostać wywołane.
Dzisiaj pracowałem nad swoją aplikacją i uruchomiłem serwer w tle. Chciałem dokonać pewnych zmian i odświeżyć stronę i natychmiast zobaczyć zmiany. W szczególności wprowadzałem zmiany w moim układzie. Nie mogłem go zmusić do działania, więc szukałem odpowiedzi na Przepełnienie stosu i znalazłemto pytanie. Mówi, żeby się upewnićexpress.static()
jest poniżejrequire('stylus')
. Ale kiedy patrzyłem na kod tego OP, zobaczyłem, że ma jegoapp.router
zadzwonić na samym końcu swoich rozmów z oprogramowaniem pośrednim i próbowałem dowiedzieć się, dlaczego tak było.
Kiedy stworzyłem aplikację Express.js (wersja 3.0.0rc4), użyłem poleceniaexpress app --sessions --css stylus
w moim pliku app.js kod został skonfigurowany za pomocą mojegoapp.router
powyżej obuexpress.static()
irequire('stylus')
połączenia. Wygląda na to, że jeśli jest już tak skonfigurowany, to powinien pozostać w ten sposób.
Po ponownym rozmieszczeniu mojego kodu, aby zobaczyć zmiany rysika, wygląda to tak:
app.configure(function(){
//app.set() calls
//app.use() calls
//...
app.use(app.router);
app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));
});
app.get('/', routes.index);
app.get('/test', function(req, res){
res.send('Test');
});
Postanowiłem więc, że pierwszym krokiem będzie ustalenie, dlaczego tak ważne jest nawet posiadanieapp.router
w moim kodzie. Skomentowałem to, uruchomiłem aplikację i nawigowałem do/
. Wyświetliła się moja strona indeksu. Hmm, może to zadziałało, ponieważ eksportowałem routing z mojego pliku routingu (routes.index). Więc dalej nawigowałem do/test
i wyświetlił Test na ekranie. Haha, OK, nie mam pojęcia coapp.router
robi. Niezależnie od tego, czy jest dołączony do mojego kodu, czy nie, mój routing jest w porządku. Więc zdecydowanie czegoś mi brakuje.
Oto moje pytanie:
Czy ktoś mógłby wyjaśnić coapp.router
czy ma to znaczenie i gdzie powinienem umieścić je w moich wywołaniach oprogramowania pośredniego? Byłoby również miło, gdybym miał krótkie wyjaśnienie na ten tematexpress.static()
. O ile wiem,express.static()
jest pamięcią podręczną moich informacji i jeśli aplikacja nie może znaleźć żądanej strony, sprawdzi pamięć podręczną, czy istnieje.