Co to jest Connect, Express i „oprogramowanie pośrednie” Node.js?

634

Pomimo dość dobrej znajomości JavaScript, jestem zdezorientowany, co dokładnie robią te trzy projekty w ekosystemie Node.js. Czy to coś w stylu stojaka Rails? Czy ktoś może wyjaśnić?

tillda
źródło
1
Nie korzystałem z Connect, ale ta strona na pewno sprawia, że ​​brzmi analogicznie do Rack 'Rack. Czy rozumiesz, co to jest oprogramowanie pośrednie poza kontekstem Node?
Matt Ball
Szczerze mówiąc, nie tak bardzo, jak bym tego chciał. O ile wiem, to warstwa, która wykonuje wszystkie czynności przedaplikacyjne, takie jak routing, gzipping, nagłówki, pliki cookie ...? Czy mam rację? Czy to działa w taki sposób, że routing do właściwego kontrolera / akcji MVC nie znajduje się wewnątrz frameworka MVC (jak Rails), ale w oprogramowaniu pośrednim?
tillda
8
TO WYCZYŚĆ WSZYSTKIE WĄTPLIWOŚCI I ODPOWIEDZIE WIELE WIĘCEJ PYTAŃ, KTÓRE MASZ Rozumiem, że jest już za późno (mam nadzieję, że ktoś przewija w dół ...), ale przeczytanie poniższego artykułu na blogu rozwiąże wszystkie pytania dotyczące Connect, Express i Middleware . Uczy Cię również trochę o Node.js. http://evanhahn.com/understanding-express/
DotNetInfo
@DiegoCaxito Twój link jest uszkodzony.
Maszt

Odpowiedzi:

891

[ Aktualizacja: Od wersji 4.0 Express nie używa już Connect. Jednak Express jest nadal kompatybilny z oprogramowaniem pośrednim napisanym dla Connect. Moja oryginalna odpowiedź znajduje się poniżej.]

Cieszę się, że o to pytałeś, ponieważ zdecydowanie jest to powszechne zamieszanie wśród ludzi spoglądających na Node.js. Oto mój najlepszy sposób na wyjaśnienie tego:

  • Sam Node.js oferuje moduł http , którego createServermetoda zwraca obiekt, którego można użyć do odpowiedzi na żądania HTTP. Ten obiekt dziedziczy http.Serverprototyp.

  • Connect oferuje również createServermetodę, która zwraca obiekt, który dziedziczy rozszerzoną wersję http.Server. Rozszerzenia Connect są głównie dostępne, aby ułatwić podłączanie oprogramowania pośredniego . Właśnie dlatego Connect określa się jako „framework oprogramowania pośredniego” i często jest analogicznie do Rack Ruby.

  • Express robi, aby połączyć to, co robi Connect z modułem http: Oferuje createServermetodę, która rozszerza Serverprototyp Connect . Istnieje więc cała funkcjonalność Connect, a także renderowanie widoku i przydatny DSL do opisywania tras. Sinatra Ruby jest dobrą analogią.

  • Są też inne frameworki, które idą jeszcze dalej i rozszerzają Express! Na przykład Zappa , która integruje obsługę CoffeeScript, jQuery po stronie serwera i testowanie.

Oto konkretny przykład znaczenia „oprogramowania pośredniego”: Po wyjęciu z pudełka żadne z powyższych nie udostępnia plików statycznych. Ale po prostu wrzuć connect.static(oprogramowanie pośrednie dostarczane z Connect), skonfigurowane tak, aby wskazywało na katalog, a Twój serwer zapewni dostęp do plików w tym katalogu. Należy pamiętać, że Express zapewnia również oprogramowanie pośrednie Connect; express.staticjest taki sam jak connect.static. (Oba były znane staticProviderdo niedawna.)

Mam wrażenie, że większość „prawdziwych” aplikacji Node.js jest obecnie rozwijanych za pomocą Express; funkcje, które dodaje, są niezwykle przydatne, a wszystkie funkcje niższego poziomu są nadal dostępne, jeśli chcesz.

Trevor Burnham
źródło
130
Jedną z rzeczy, które mnie denerwują w związku z Connect jest to, że jego dokumentacja nie wydaje się potwierdzać, że Węzeł jest czymś więcej niż serwerem HTTP. „Connect jest strukturą oprogramowania pośredniego dla Node.js” - nie, „Connect jest strukturą oprogramowania pośredniego dla serwera HTTP Node.js”
slim
46
@slim Myślę, że za dużo tego czytasz. Twórcy Connect są wybitnymi programistami Node; doskonale wiedzą, że Węzeł to coś więcej niż serwer HTTP. Ale to nie mieć serwer HTTP wbudowany i połączyć to ramy pośredniej, które można wykorzystać w swojej aplikacji node.js.
Trevor Burnham,
22
Och, jestem pewien, że twórcy Connect są tego w pełni świadomi. Nie mogliby osiągnąć tego, co mają, bez dogłębnego zrozumienia Węzła. Ale wybór słów jest mylący dla nowych użytkowników Node; i dla nowych użytkowników Connect.
szczupły,
10
jasne, do czego powinny dążyć wszystkie odpowiedzi. Doskonała praca Trevor.
Mark Essel,
6
Świetne wyjaśnienie. Takie odpowiedzi pomagają wprowadzić nowych ludzi do ekosystemu Node.js. Dla osób zaznajomionych z tworzeniem aplikacji internetowych w Node.js, Express jest miejscem, od którego można zacząć. Aby kontynuować analogię z Ruby, Express jest porównywalny do Sinatry. Jest to szczególnie świetne do tworzenia interfejsów API JSON dla aplikacji po stronie klienta Ajax. Jedną rzeczą, którą znalazłem, jest to, że gdy aplikacja osiągnie pewien poziom złożoności, potrzebna jest kolejna warstwa, bardziej podobna do Railsów. W tym celu pracuję nad lokomotywą , która dodatkowo nakłada się na Express.
Jared Hanson,
159

Przyjęta odpowiedź jest naprawdę stara (a teraz błędna). Oto informacje (ze źródłem) oparte na bieżącej wersji Connect (3.0) / Express (4.0).

Co zawiera Node.js

http / https, createServer który po prostu przyjmuje wywołanie zwrotne (req, res) np

var server = http.createServer(function (request, response) {

    // respond
    response.write('hello client!');
    response.end();

});

server.listen(3000);

Co łączy dodaje

Oprogramowanie pośrednie to w zasadzie każde oprogramowanie, które znajduje się między kodem aplikacji a jakimś interfejsem API niskiego poziomu. Connect rozszerza wbudowaną funkcjonalność serwera HTTP i dodaje strukturę wtyczek. Wtyczki działają jako oprogramowanie pośrednie, a zatem connect jest strukturą oprogramowania pośredniego

Sposób, w jaki to robi, jest dość prosty ( a tak naprawdę kod jest naprawdę krótki! ). Jak tylko zadzwonisz var connect = require('connect'); var app = connect();, otrzymasz funkcję, appktóra może:

  1. Może obsłużyć żądanie i zwrócić odpowiedź. Wynika to z tego, że w zasadzie dostajesz tę funkcję
  2. Ma funkcję członka .use( źródło ) do zarządzania wtyczkami ( która pochodzi stąd z tego prostego wiersza kodu ).

Z powodu 1.) możesz wykonać następujące czynności:

var app = connect();

// Register with http
http.createServer(app)
    .listen(3000);

Połącz z 2.), a otrzymasz:

var connect = require('connect');

// Create a connect dispatcher
var app = connect()
      // register a middleware
      .use(function (req, res, next) { next(); });

// Register with http
http.createServer(app)
    .listen(3000);

Connect zapewnia funkcję narzędzia, w której można się zarejestrować, httpdzięki czemu nie trzeba wykonywać połączeń http.createServer(app). Jest wywoływany, listena kod po prostu tworzy nowy serwer http, rejestr łączy się jako wywołanie zwrotne i przekazuje argumenty do http.listen. Ze źródła

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

Możesz więc:

var connect = require('connect');

// Create a connect dispatcher and register with http
var app = connect()
          .listen(3000);
console.log('server running on port 3000');

To wciąż twój stary dobry http.createServerz ramą wtyczek na górze.

Co dodaje ExpressJS

ExpressJS i connect to równoległe projekty. Connect jest po prostu strukturą oprogramowania pośredniego z przyjemną usefunkcją. Express nie zależy od Connect ( patrz package.json ). Jednak robi to wszystko, co łączy:

  1. Może być zarejestrowany przez createServerlike connect, ponieważ jest to również funkcja, która może pobrać req/ respair ( źródło ).
  2. Funkcja użycie zarejestrować middleware .
  3. Funkcja narzędzia listendo rejestracji w http

Oprócz tego, co zapewnia connect (który wyraża duplikaty), ma wiele innych funkcji. na przykład

  1. Posiada obsługę silnika podglądu .
  2. Ma czasowniki najwyższego poziomu (get / post itp.) Dla swojego routera .
  3. Ma ustawień aplikacji wsparcie.

Oprogramowanie pośrednie jest udostępniane

useFunkcją ExpressJS i Connect jest kompatybilny i dlatego middleware jest wspólna . Oba są platformami oprogramowania pośredniego, express ma tylko coś więcej niż zwykłą platformę oprogramowania pośredniego .

Którego powinieneś użyć?

Moja opinia: jesteś wystarczająco poinformowany ^ na podstawie powyższego ^, aby dokonać własnego wyboru.

  • Użyj, http.createServerjeśli tworzysz od zera coś takiego jak connect / expressjs.
  • Użyj Connect, jeśli tworzysz oprogramowanie pośrednie, testujesz protokoły itp., Ponieważ jest to niezła abstrakcja http.createServer
  • Użyj ExpressJS, jeśli tworzysz strony internetowe.

Większość ludzi powinna po prostu korzystać z ExpressJS.

Co jest złego w zaakceptowanej odpowiedzi

Mogłyby to być z czasem prawdziwe, ale teraz błędne:

dziedziczy rozszerzoną wersję http.Server

Źle. Nie rozszerza go i jak widzieliście ... używa go

Express robi, aby połączyć to, co robi Connect z modułem http

Express 4.0 nawet nie zależy od połączenia. zobacz aktualną sekcję zależności package.json

basarat
źródło
mówisz, że daje ci możliwość obsłużenia żądania i zwrócenia odpowiedzi, ale ludzie mówią, że Express to tak naprawdę serwer WWW ... Jestem zdezorientowany. Czy odesłanie odpowiedzi nie wymagałoby możliwości serwera WWW (takiego jak Express)?
PositiveGuy,
1
dobre rzeczy, dzięki! bardzo pomocne ... szczególnie nie wiedząc, że połączenie jest tym, co zapewnia routing, a ekspres po prostu dziedziczy, że nie jest to jedyny / źródłowy dostawca routingu. A przypadki użycia na końcu są pomocne, ponieważ założyłem, że będę musiał korzystać z Connect AND express, ale tak naprawdę wszystko, czego potrzebujesz, to ekspres dla aplikacji internetowych, więc dla mnie to ogromna sprawa. Nie instalujesz obu, instalujesz jedną lub drugą!
PositiveGuy,
Twoja odpowiedź powinna być na górze. kiedy przeczytałem zaakceptowaną odpowiedź, głosowałem za nią. Ale po przeczytaniu twojej odpowiedzi ... naahhh
Arun Joshla
67

node.js

Node.js to silnik javascript po stronie serwera.
Oprócz wszystkich możliwości js, obejmuje on także funkcje sieciowe (takie jak HTTP) oraz dostęp do systemu plików.
Różni się to od js po stronie klienta, gdzie zadania sieciowe są zmonopolizowane przez przeglądarkę, a dostęp do systemu plików jest zabroniony ze względów bezpieczeństwa.

node.js jako serwer WWW: express

Coś, co działa na serwerze, rozumie HTTP i może uzyskiwać dostęp do plików, brzmi jak serwer WWW. Ale to nie jest jeden.
Aby węzeł.js zachowywał się jak serwer WWW, należy go zaprogramować: obsłużyć przychodzące żądania HTTP i podać odpowiednie odpowiedzi.
Tak robi Express: implementacja serwera WWW w js.
W związku z tym wdrożenie witryny internetowej jest jak konfigurowanie tras ekspresowych i programowanie specyficznych funkcji witryny.

Oprogramowanie pośrednie i połączenie

Obsługa stron wiąże się z wieloma zadaniami. Wiele z tych zadań jest dobrze znanych i bardzo powszechnych, więc moduł Connect węzła (jeden z wielu modułów dostępnych do uruchomienia w węźle) implementuje te zadania.
Zobacz aktualną imponującą ofertę:

  • logger logger z obsługą formatu niestandardowego
  • csrf Ochrona przed fałszowaniem żądań w różnych witrynach
  • kompresuj oprogramowanie pośrednie kompresji Gzip
  • basicAuth podstawowe uwierzytelnianie HTTP
  • bodyParser rozszerzalny analizator składni żądania
  • json application / json parser
  • urlencoded application / x-www-form-urlencoded parser
  • wieloczęściowy parser multipart / form-data
  • limity czasu żądania
  • cookieParser parser plików cookie
  • Sesja wsparcie zarządzania sesją z dołączonym MemoryStore
  • cookieSession Obsługa sesji oparta na plikach cookie
  • methodOverride faux Obsługa metody HTTP
  • responseTime oblicza czas odpowiedzi i odsłania za pomocą X-Czas odpowiedzi
  • warstwa pamięci podręcznej staticCache dla oprogramowania pośredniego static ()
  • statyczny streaming statyczny serwer plików obsługujący zakres i więcej
  • katalog wykaz oprogramowania pośredniego
  • vhost oprogramowanie pośredniczące do mapowania subdomen hosta wirtualnego
  • favicon wydajny serwer favicon (z domyślną ikoną)
  • limit ogranicza bajtowanie treści żądań
  • zapytanie automatyczny parser kwerendowy, wypełnianie zapytania
  • errorHandler elastyczna procedura obsługi błędów

Connect to framework, dzięki któremu możesz wybrać (pod) moduły, których potrzebujesz.
Strona oprogramowania pośredniego Contrib zawiera długą listę dodatkowych programów pośrednich .
Sam Express jest wyposażony w najpopularniejsze oprogramowanie pośrednie Connect.

Co robić?

Zainstaluj node.js.
Węzeł jest dostarczany z npm , menedżerem pakietów węzłów .
Polecenie npm install -g expresspobierze i zainstaluje ekspresowe globalnie (sprawdź przewodnik ekspresowy ).
Uruchomienie express foow wierszu poleceń (nie w węźle) spowoduje utworzenie gotowej do uruchomienia aplikacji o nazwie foo. Przejdź do jego (nowo utworzonego) katalogu i uruchom go z węzłem za pomocą polecenia node <appname>, a następnie otwórz http://localhost:3000i zobacz. Teraz jesteś w.

Juan Lanus
źródło
3
świetna odpowiedź dzięki. Jest to rodzaj badziewia, którego brakuje w każdym poście, prosta konfiguracja, którą można ?? jeśli nigdy wcześniej tego nie robiliście. Tak, to proste, kiedy już to zrobiłeś, ale nie masz pojęcia, jak zacząć po raz pierwszy! Nienawidzę tego, gdy deweloperzy przeoczają to w postach na blogu, jest to niezbędne. Nie chcę znaleźć innego wpisu na blogu, aby znaleźć konfigurację. Po prostu podaj link do innego postu na blogu w innych postach, co jest niezwykle pomocne, więc nie muszę poszukać takiego. Uratuj mnie na polowaniu!
PositiveGuy,
3
Express 4.0.0 musi zrobić sudo npm install -g express-generator
mohamed-ibrahim
@getsetbro masz na myśli po prostu „instalację npm”, aby zainstalować zależności.
Torsten Barthel,
16

Connect oferuje interfejsy API „wyższego poziomu” do typowych funkcji serwera HTTP, takich jak zarządzanie sesjami, uwierzytelnianie, rejestrowanie i inne. Express jest zbudowany na Connect z zaawansowaną funkcjonalnością (podobną do Sinatry).

yojimbo87
źródło
0

Node.jssam oferuje moduł HTTP, którego metoda createServer zwraca obiekt, którego można użyć do odpowiedzi na żądania HTTP. Ten obiekt dziedziczy http.Serverprototyp.

Suraj Kumar Yadav
źródło
0

Powiązane informacje, szczególnie jeśli używasz NTVS do pracy z Visual Studio IDE. NTVS dodaje zarówno narzędzia NodeJS, jak i Express, rusztowania, szablony projektów do Visual Studio 2012, 2013.

Również wersja wywołująca ExpressJS lub Connect jako „WebServer” jest niepoprawna. Możesz utworzyć podstawowy serwer WWW z nimi lub bez nich. Podstawowy program NodeJS może również używać modułu http do obsługi żądań HTTP, stając się w ten sposób podstawowym serwerem WWW.

Vic
źródło
0

oprogramowanie pośrednie, jak sama nazwa sugeruje, oprogramowanie pośrednie znajduje się pomiędzy środkiem .. środkiem czego? środek żądania i odpowiedzi .. jak żądanie, odpowiedź, serwer ekspresowy siedzą w ekspresowej aplikacji na tym zdjęciu widać żądania przychodzące od klienta, a następnie serwer ekspresowy obsługuje te żądania .. następnie pozwala kopać głębiej .. w rzeczywistości możemy to podzielić całe zadanie serwera ekspresowego w małe oddzielne zadania jak w ten sposób. jak oprogramowanie pośredniczące znajduje się pomiędzy żądaniem a odpowiedzią mała część części serwera wykonująca określone zadanie i przekazała zapytanie do następnej .. w końcu wykonując wszystkie zadania odpowiedź została wykonana .. całe oprogramowanie pośrednie może uzyskać dostęp do obiektu żądania, obiektu odpowiedzi i następnej funkcji żądania cykl odpowiedzi ..

to dobry przykład na wyjaśnienie oprogramowania pośredniego w ekspresowym wideo youtube dla oprogramowania pośredniego

hasanga lakdinu
źródło
-7

Głupia prosta odpowiedź

Connect i Express to serwery sieciowe dla nodejs. W przeciwieństwie do Apache i IIS, oba mogą używać tych samych modułów, zwanych „oprogramowaniem pośrednim”.

kmiles
źródło