Prawie każda aplikacja Express, którą widzę, ma app.use
instrukcję dla oprogramowania pośredniego, ale nie znalazłem jasnego, zwięzłego wyjaśnienia, czym tak naprawdę jest oprogramowanie pośrednie i co app.use
robi instrukcja. Nawet same ekspresowe dokumenty są nieco niejasne. Czy możesz mi wyjaśnić te pojęcia?
228
Odpowiedzi:
oprogramowanie pośrednie
Jestem w połowie drogi do rozdzielenia koncepcji oprogramowania pośredniego w nowym projekcie.
Oprogramowanie pośrednie pozwala zdefiniować stos działań, przez które należy przejść. Same serwery ekspresowe to stos oprogramowania pośredniego.
Następnie możesz dodać warstwy do stosu oprogramowania pośredniego, wywołując
.use
Warstwa w stosie oprogramowania pośredniego to funkcja, która przyjmuje n parametrów (2 dla express,
req
&res
) inext
funkcję.Oprogramowanie pośrednie oczekuje, że warstwa wykona pewne obliczenia, zwiększy parametry, a następnie wywoła
next
.Stos nic nie robi, chyba że sobie z tym poradzisz. Express obsłuży stos za każdym razem, gdy przychodzące żądanie HTTP zostanie przechwycone na serwerze. Dzięki oprogramowaniu pośredniczemu możesz ręcznie obsługiwać stos.
Bardziej kompletny przykład:
W kategoriach ekspresowych po prostu definiujesz stos operacji, które ekspres ma obsługiwać dla każdego przychodzącego żądania HTTP.
Jeśli chodzi o ekspresowe (zamiast łączenia), masz globalne oprogramowanie pośrednie i konkretne oprogramowanie pośredniczące dla trasy. Oznacza to, że możesz dołączyć stos oprogramowania pośredniego do każdego przychodzącego żądania HTTP lub dołączyć go tylko do żądań HTTP, które wchodzą w interakcję z określoną trasą.
Zaawansowane przykłady ekspresowego i oprogramowania pośredniego:
źródło
app.use()
składnią. Jaka jest rzeczywista wartość zwracana oprogramowania pośredniego i co z tymuse
zrobić?Po uproszczeniu rzeczy, serwer WWW może być postrzegany jako funkcja, która przyjmuje żądanie i wysyła odpowiedź. Jeśli więc widzisz serwer WWW jako funkcję, możesz zorganizować go w kilka części i podzielić na mniejsze funkcje, aby ich skład był oryginalną funkcją.
Programy pośrednie to mniejsze funkcje, które można komponować z innymi, a oczywistą zaletą jest to, że można z nich ponownie korzystać.
źródło
Dodaję późną odpowiedź, aby dodać coś niewymienionego w poprzednich odpowiedziach.
Do tej pory powinno być jasne, że oprogramowanie pośredniczące jest / są funkcjami uruchomionymi między żądaniem klienta a odpowiedzią serwera . Najbardziej potrzebne funkcje oprogramowania pośredniego to zarządzanie błędami, interakcja z bazą danych, uzyskiwanie informacji z plików statycznych lub innych zasobów. Aby przejść na stos oprogramowania pośredniego, należy wywołać następne wywołanie zwrotne, można to zobaczyć na końcu funkcji oprogramowania pośredniego, aby przejść do następnego kroku w przepływie.
Można użyć
app.use
podejścia i posiada przepływ takiego :ale możesz także użyć innego podejścia i przekazać każde oprogramowanie pośrednie jako argumenty funkcji. Oto przykład ze strony MooTools Nodejs, gdzie oprogramowanie pośredniczące pobiera Twitter, Github i Blog, zanim
response
zostanie odesłane z powrotem do klienta. Zwróć uwagę, jak funkcje są przekazywane jako argumenty wapp.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
. Użycieapp.get
będzie wywoływane tylko dla żądań GET,app.use
będzie wywoływane dla wszystkich żądań.źródło
.get()
metoda przyjmuje 3 typy argumentów: pierwszy, ostatni i środkowy. Wewnętrznie wykrywa, czy argumentów jest więcej niż 2, i używa tych (środkowych) jako funkcji oprogramowania pośredniego, wywołując je od lewej do prawej.Przewodnik expressjs ma całkiem fajną odpowiedź na twoje pytanie, gorąco polecam przeczytanie go, zamieszczam krótki fragment przewodnika, przewodnik jest całkiem dobry.
Pisanie oprogramowania pośredniego do użytku w aplikacjach Express
Przegląd
Funkcje oprogramowania pośredniego to funkcje, które mają dostęp do obiektu żądania ( req ), obiektu odpowiedzi ( res ) i następnej funkcji w cyklu żądania i odpowiedzi aplikacji. Następna funkcja to funkcja w routerze Express, która po wywołaniu uruchamia oprogramowanie pośrednie po bieżącym oprogramowaniu pośrednim.
Funkcje oprogramowania pośredniego mogą wykonywać następujące zadania:
Jeśli bieżąca funkcja oprogramowania pośredniego nie kończy cyklu żądanie-odpowiedź, musi wywołać next () w celu przekazania kontroli do następnej funkcji oprogramowania pośredniego. W przeciwnym razie żądanie pozostanie zawieszone.
Przykład
Oto przykład prostej aplikacji ekspresowej „Hello World”. Pozostała część tego artykułu określi i doda do aplikacji dwie funkcje oprogramowania pośredniego: jedną o nazwie myLogger, która drukuje prosty komunikat dziennika, a drugą o nazwie requestTime 1, która wyświetla znacznik czasu żądania HTTP.
Funkcja oprogramowania pośredniego myLogger
Oto prosty przykład funkcji oprogramowania pośredniego o nazwie „myLogger”. Ta funkcja po prostu drukuje „ZALOGOWANE”, gdy przechodzi przez nią żądanie do aplikacji. Funkcja oprogramowania pośredniego jest przypisana do zmiennej o nazwie myLogger.
Aby załadować funkcję oprogramowania pośredniego, wywołaj app.use () , określając funkcję oprogramowania pośredniego. Na przykład poniższy kod ładuje funkcję oprogramowania pośredniego myLogger przed trasą do ścieżki głównej (/).
Za każdym razem, gdy aplikacja otrzyma żądanie, drukuje komunikat „ZALOGOWANY” na terminalu.
Kolejność ładowania oprogramowania pośredniego jest ważna: najpierw uruchamiane są funkcje oprogramowania pośredniego, które są ładowane jako pierwsze.
Jeśli myLogger jest ładowany po trasie do ścieżki głównej, żądanie nigdy go nie osiąga, a aplikacja nie drukuje komunikatu „ZALOGOWANO”, ponieważ procedura obsługi trasy głównej ścieżki kończy cykl żądanie-odpowiedź.
Funkcja oprogramowania pośredniego myLogger po prostu drukuje komunikat, a następnie przekazuje żądanie do następnej funkcji oprogramowania pośredniego na stosie, wywołując funkcję next () .
źródło
===== Bardzo bardzo proste wyjaśnienie =====
Middlewares są często używane w kontekście frameworka Express.js i są podstawową koncepcją dla node.js. Krótko mówiąc, jest to w zasadzie funkcja, która ma dostęp do obiektów żądania i odpowiedzi aplikacji. Sposób, w jaki chciałbym o tym myśleć, to seria „kontroli / wstępnych ekranów”, przez które przechodzi żądanie, zanim aplikacja obsłuży je. Na przykład, Middlewares dobrze byłoby ustalić, czy żądanie jest uwierzytelnione przed przejściem do aplikacji i zwrócić stronę logowania, jeśli żądanie nie jest uwierzytelnione, lub do logowania każdego żądania. Dostępnych jest wiele programów pośredniczących innych firm, które umożliwiają różnorodne funkcje.
Prosty przykład oprogramowania pośredniego:
Powyższy kod byłby wykonywany dla każdego przychodzącego żądania i rejestrowałby adres URL żądania, metoda next () zasadniczo pozwala programowi kontynuować. Jeśli funkcja next () nie zostanie wywołana, program nie będzie kontynuował działania i zatrzyma się przy wykonywaniu oprogramowania pośredniego.
Kilka Middleware Gotchas:
źródło
next()
alereturn next()
. Jaka jest różnica?next()
ponieważ chcemy, aby następne wywołanie oprogramowania pośredniego było wywoływane, nie sądzęnext()
lubreturn next()
powinno to zrobić jakąkolwiek różnicę! Nadal zależy to od kodu ...Programy pośrednie są funkcjami wykonywanymi w środku po wejściu / źródle, a następnie generują dane wyjściowe, które mogą być końcowymi danymi wyjściowymi lub mogą być używane przez następne oprogramowanie pośrednie do momentu zakończenia cyklu.
To jest jak produkt, który przechodzi przez linię montażową, gdzie jest modyfikowany w miarę przesuwania się, aż zostanie ukończony, oceniony lub odrzucony.
Oprogramowanie pośrednie oczekuje, że pewna wartość będzie działać (tj. Wartości parametrów) i na podstawie pewnej logiki oprogramowanie pośredniczące wywoła lub nie wywoła następnego oprogramowania pośredniego lub odeśle odpowiedź do klienta.
Jeśli nadal nie możesz pojąć koncepcji oprogramowania pośredniego, jest on podobny do Dekoratora lub Łańcucha poleceń.
źródło
Oprogramowanie pośrednie to podzbiór funkcji łańcuchowych wywoływanych przez warstwę routingu Express js przed wywołaniem procedury obsługi zdefiniowanej przez użytkownika. Funkcje oprogramowania pośredniego mają pełny dostęp do obiektów żądania i odpowiedzi i mogą modyfikować dowolny z nich.
Łańcuch oprogramowania pośredniego jest zawsze wywoływany w dokładnie takiej kolejności, w jakiej został zdefiniowany, dlatego bardzo ważne jest, aby dokładnie wiedzieć, co robi konkretny element oprogramowania pośredniego.
Po zakończeniu funkcji oprogramowania pośredniego wywołuje następną funkcję w łańcuchu, wywołując jej następny argument jako funkcję.
Po wykonaniu całego łańcucha wywoływana jest procedura obsługi żądań użytkownika.
źródło
Uprość to, stary!
Uwaga: odpowiedź dotyczy przypadków wbudowanego oprogramowania pośredniego ExpressJS, jednak istnieją różne definicje i przypadki użycia oprogramowania pośredniego.
Z mojego punktu widzenia, middleware działa jako funkcji użytkowych lub pomocnika, ale jego uruchomienie i stosowanie jest całkowicie opcjonalne za pomocą przycisków
app.use('path', /* define or use builtin middleware */)
, które nie chce od nas napisać trochę kodu do wykonywania bardzo typowych zadań, które są potrzebne dla każdego żądania HTTP naszego klienta takie jak przetwarzanie plików cookie, tokenów CSRF i ..., które są bardzo powszechne w większości aplikacji, więc oprogramowanie pośrednie może pomóc nam to zrobić dla każdego żądania HTTP naszego klienta w stosie, sekwencji lub kolejności operacji, a następnie dostarczyć wynik procesu jako pojedyncza jednostka żądania klienta .Przykład:
Przyjmowanie żądań klientów i udzielanie odpowiedzi zwrotnych zgodnie z ich żądaniami jest naturą technologii serwerów sieciowych.
Wyobraź sobie, że odpowiadamy tylko „Witaj, świecie!” tekst żądania GET HTTP do głównego identyfikatora URI naszego serwera WWW jest bardzo prostym scenariuszem i nie wymaga niczego innego, ale zamiast tego sprawdzamy aktualnie zalogowanego użytkownika, a następnie odpowiadamy „Witaj, nazwa użytkownika!” potrzebuje czegoś więcej niż zwykle w tym przypadku potrzebujemy oprogramowania pośredniego do przetworzenia wszystkich metadanych żądania klienta i dostarczenia nam informacji identyfikacyjnych pobranych z żądania klienta, a następnie zgodnie z tymi informacjami możemy jednoznacznie zidentyfikować naszego bieżącego użytkownika i można na nie odpowiedzieć z jej powiązanymi danymi.
Mam nadzieję, że komuś pomoże!
źródło
Mówiąc bardzo prosto, jeśli chcę to wyjaśnić w ten sposób, uczę się tego z traversymedia youtube channel express express crash crash.
ok, więc middleware to funkcja, która jest wykonywana po wykonaniu połączenia w taki sposób.
Ta funkcja rejestratora jest wykonywana za każdym razem, gdy odświeżasz stronę, co oznacza, że możesz napisać w niej wszystko, co trzeba zrobić po wyrenderowaniu strony przez dowolne wywołanie interfejsu API, zresetować wszystko w zasadzie wszystko. i umieść to oprogramowanie pośrednie, zanim kolejność oprogramowania pośredniego funkcji trasy jest naprawdę ważna lub nie działa
źródło