Zanim zapytam o app.router, myślę, że powinienem przynajmniej wyjaśnić, co myślę, co dzieje się podczas pracy z oprogramowaniem pośrednim. Aby użyć oprogramowania pośredniego, należy użyć tej funkcji app.use(). Podczas wykonywania oprogramowania pośredniego wywoła następne oprogramowanie pośrednie za pomocą next()lub sprawi, że nie będzie już wywoływane. 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 aplikacją i mój serwer działał w tle. Chciałem wprowadzić pewne zmiany, odświeżyć stronę i od razu je zobaczyć. W szczególności wprowadzałem zmiany w moim układzie. Nie mogłem go uruchomić, więc szukałem odpowiedzi na Przepełnienie stosu i znalazłem to pytanie . Mówi, aby upewnić się, że express.static()jest poniżej require('stylus'). Ale kiedy patrzyłem na kod tego OP, zobaczyłem, że miał swoje app.routerpołączenie na samym końcu swoich wywołań oprogramowania pośredniego i próbowałem dowiedzieć się, dlaczego tak się dzieje.
Kiedy utworzyłem aplikację Express.js (wersja 3.0.0rc4), użyłem polecenia, express app --sessions --css stylusaw moim pliku app.js kod został dostarczony wraz z moimi app.routerpowyższymi wywołaniami express.static()i require('stylus'). Wygląda więc na to, że jeśli tak już jest, to tak powinno pozostać.
Po zmianie aranżacji kodu, aby zobaczyć zmiany w rysiku, 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');
});
Zdecydowałem więc, że pierwszym krokiem będzie ustalenie, dlaczego tak ważne jest, aby mieć nawet app.routermój kod. Skomentowałem to, uruchomiłem aplikację i nawigowałem do /. Moja strona indeksu wyświetlała się dobrze. Hmm, może zadziałało, ponieważ eksportowałem routing z mojego pliku tras (route.index). Następnie nawigowałem /testi wyświetliłem Test na ekranie. Haha, OK, nie mam pojęcia co app.routerrobi. Niezależnie od tego, czy jest to zawarte w moim kodzie, czy nie, moje routing jest w porządku. Więc zdecydowanie czegoś mi brakuje.
Oto moje pytanie:
Czy ktoś mógłby wyjaśnić, co to app.routerznaczy, jak ważne jest to miejsce i gdzie powinienem to umieścić w wywołaniach oprogramowania pośredniego? Byłoby również miło, gdybym otrzymał krótkie wyjaśnienie na temat express.static(). O ile mogę stwierdzić, express.static()jest to pamięć podręczna moich informacji, a jeśli aplikacja nie może znaleźć żądanej strony, sprawdzi pamięć podręczną, aby sprawdzić, czy istnieje.