Co To jest Node.js "Connect, Express i "middleware"?

Pomimo znajomości JavaScript dość dobrze, jestem zdezorientowany co dokładnie te trzy projekty w Node.js ekosystem zrobić. Coś jak Rails ' Rack? Czy ktoś może wyjaśnić?

Author: rixo, 2011-03-12

8 answers

[Aktualizacja: od wersji 4.0 Express nie używa już Connect. Jednak Express jest nadal kompatybilny z oprogramowaniem pośredniczącym napisanym dla Connect. Moja oryginalna odpowiedź jest poniżej.]

Cieszę się, że o to zapytałeś, ponieważ jest to zdecydowanie częsty punkt zamieszania dla ludzi patrzących na węzeł.js. Oto moja najlepsza szansa na wyjaśnienie tego:

  • Węzeł.sam JS oferuje moduł http , którego metoda createServer zwraca obiekt, na który można odpowiedzieć Żądania HTTP. Obiekt ten dziedziczy prototyp {[1] }.

  • Connect oferuje również metodę createServer, która zwraca obiekt, który dziedziczy rozszerzoną wersję http.Server. Rozszerzenia Connect są głównie po to, aby ułatwić podłączenie middleware. Dlatego Connect opisuje siebie jako "Framework middleware" i jest często analogiczny do racka Rubiego.

  • Express robi to, co Connect robi z modułem http: oferuje metoda createServer rozszerzająca prototyp Connect ' a Server. Tak więc cała funkcjonalność Connect jest tam, plus renderowanie widoku i poręczny DSL do opisywania tras. Sinatra Ruby to dobra analogia.

  • Są też inne frameworki, które idą jeszcze dalej i rozszerzają Express! Zappa , na przykład, który integruje wsparcie dla CoffeeScript, jQuery po stronie serwera i testing.

Oto konkretny przykład tego, co oznacza " middleware": Po wyjęciu z pudełka żaden z powyższych plików nie obsługuje dla Ciebie plików statycznych. Ale wystarczy dorzucić connect.static (oprogramowanie pośrednie dostarczane z Connect), skonfigurowane tak, aby wskazywało na katalog, a serwer zapewni dostęp do plików w tym katalogu. Zauważ, że Express udostępnia również middlewares Connect; express.static jest tym samym co connect.static. (Do niedawna obie były znane jako staticProvider.)

Moje wrażenie jest to najbardziej "prawdziwy" węzeł.aplikacje js są obecnie rozwijane z Express; funkcje, które dodaje, są niezwykle przydatne, a wszystkie funkcje niższego poziomu są nadal tam, jeśli chcesz.

 900
Author: Trevor Burnham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 19:09:07

Przyjęta odpowiedź jest naprawdę stara (a teraz zła). Oto informacje (ze źródłem) oparte na aktualnej wersji Connect ( 3.0) / Express (4.0).

Jaki Węzeł.js comes with

Http / https createServer co po prostu wymaga wywołania zwrotnego (req,res), np.

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

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

});

server.listen(3000);

Co dodaje connect

Middleware to w zasadzie każde oprogramowanie, które znajduje się pomiędzy kodem aplikacji a jakimś niskopoziomowym API. Connect rozszerza wbudowany HTTP funkcjonalność serwera i dodaje framework wtyczki. Wtyczki działają jako middleware i dlatego connect jest frameworkiem middleware

Sposób, w jaki to robi, jest dość prosty ( i w rzeczywistości kod jest naprawdę krótki!). Po wywołaniu var connect = require('connect'); var app = connect(); otrzymujesz funkcję app, która może:

  1. może obsłużyć żądanie i zwrócić odpowiedź. To dlatego, że w zasadzie otrzymujesz tę funkcję
  2. ma funkcję członka .use (źródło ) do zarządzania wtyczki (to pochodzi stąd z powodu tej prostej linii kodu).

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

var app = connect();

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

Połączyć z 2.) i otrzymujesz:

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 udostępnia funkcję użytkową do rejestracji za pomocą http, dzięki czemu nie trzeba wykonywać połączenia do http.createServer(app). Jego wywołanie listen i Kod po prostu tworzy nowy serwer http, register ' s connect jako callback i przekazuje argumenty do http.listen. ze źródła

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

Więc możesz zrobić:

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 {[13] } z frameworkiem wtyczki na górze.

Co dodaje ExpressJS

ExpressJS I connect to projekty równoległe. Connect to po prostu Framework middleware z ładną funkcją use. Express nie zależy od Connect (zobacz pakiet.json ). Jednak robi to wszystko, co robi connect, tj.]}

  1. może być zarejestrowany w createServer Jak connect, ponieważ to też jest tylko funkcja, która może req/res para (źródło).
  2. A użyj funkcji do rejestracji middleware.
  3. a utility listen function to register itself with http

Oprócz tego, co zapewnia connect (który wyraża duplikaty), ma kilka innych funkcji. np.

  1. posiada obsługę silnika widoku .
  2. Has top level verbs (get/post itp.) dla jego router .
  3. posiada ustawienia aplikacji wsparcie.

Middleware jest dzielone

Funkcja use ExpressJS i connect jest kompatybilna i dlatego middleware jest współdzielone . Oba są frameworkami middleware, express ma więcej niż prosty Framework middleware.

Którego z nich należy użyć?

Moja opinia: jesteś wystarczająco poinformowany ^na podstawie powyższego^ aby zrobić własne wybór.

  • użyj http.createServer, Jeśli tworzysz coś takiego jak connect / expressjs od zera.
  • użyj connect, jeśli tworzysz oprogramowanie pośrednie, testujesz protokoły itp. ponieważ jest to ładna Abstrakcja na szczycie http.createServer
  • użyj ExpressJS, jeśli tworzysz strony internetowe.

Większość ludzi powinna używać ExpressJS.

Co jest nie tak z zaakceptowaną odpowiedzią

To mogło być prawdą w pewnym momencie, ale teraz jest źle:

Który dziedziczy rozszerzoną wersję http.Serwer

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

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

Express 4.0 nie zależy nawet od connect. Zobacz aktualny pakiet.sekcja zależności json

 163
Author: basarat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 21:01:39

Węzeł.js

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

Węzeł.js jako serwer WWW: express

Coś, co działa na serwerze, rozumie HTTP i może uzyskać dostęp do plików brzmi jak serwer WWW. Ale to nie jest jeden.
Aby zrobić węzeł.js zachowuje się jak web serwer trzeba go zaprogramować: obsłużyć przychodzące żądania HTTP i dostarczyć odpowiednie odpowiedzi.
To właśnie robi Express: jest to implementacja serwera www w js.
Tak więc wdrożenie strony internetowej jest jak konfigurowanie tras ekspresowych i programowanie specyficznych funkcji witryny.

Middleware and Connect

Obsługa stron wiąże się z wieloma zadaniami. Wiele z tych zadań jest dobrze znany i bardzo powszechny, więc moduł Connect node (jeden z wielu dostępnych modułów do uruchomienia pod node) realizuje te zadania.
Zobacz aktualną ofertę:

  • rejestrator żądanie rejestratora z obsługą niestandardowego formatu
  • csrf Cross-site request forgery protection
  • compress gzip compression middleware
  • basicAuth basic http uwierzytelnianie
  • bodyParser extensible request body parser
  • JSON application/json parser
  • urlencoded application/x-www-form-urlencoded parser
  • multipart multipart / form-data parser
  • timeout request timeouts
  • cookieParser cookie parser
  • session session management support with bundled MemoryStore
  • cookieSession obsługa sesji opartych na plikach cookie
  • methodOverride faux HTTP method support
  • responseTime oblicza czas odpowiedzi i wyświetla za pomocą X-Response-Time
  • staticCache warstwa pamięci podręcznej dla warstwy pośredniej static ()
  • static streaming statyczny serwer plików obsługujący zakres i więcej
  • katalog katalog listing middleware
  • Vhost (27) virtual host sub-domain mapping middleware (28)]}
  • favicon wydajny serwer favicon (z domyślną ikoną)
  • limit limit bajtowości ciał żądań
  • query automatyczny parser zapytań, wypełniający req.zapytanie
  • errorHandler flexible error handler

Connect to framework i dzięki niemu możesz wybierz (pod)moduły, których potrzebujesz.
Strona Contriblinks wylicza długą listę dodatkowych middleware .
Express sam pochodzi z najczęstszych connect middlewares.

Co robić?

Zainstaluj węzeł.js.
Node pochodzi z npm , menedżera pakietów węzłów.
Polecenie npm install -g express pobierze i zainstaluje express globalnie (sprawdź express guide ).
Uruchamianie express foo w wierszu poleceń (Nie w węźle) utworzy gotową do uruchomienia aplikację o nazwie foo. Zmień jego (nowo utworzony) katalog i uruchom go za pomocą node za pomocą polecenia node <appname>, Następnie otwórz http://localhost:3000 i zobacz. Teraz jesteś w środku.

 69
Author: Juan Lanus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Connect oferuje interfejsy API" wyższego poziomu " dla popularnych funkcji serwera HTTP, takich jak zarządzanie sesjami, uwierzytelnianie, logowanie i wiele innych. Express jest zbudowany na bazie Connect z zaawansowaną (Sinatra like) funkcjonalnością.

 16
Author: yojimbo87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-12 19:34:03

Node.js sama oferuje moduł HTTP, którego metoda createServer zwraca obiekt, którego można użyć do odpowiedzi na żądania HTTP. Obiekt ten dziedziczy prototyp {[1] }.

 0
Author: Suraj Kumar Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-12 11:57:14

Powiązane informacje, zwłaszcza 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 "serwer WWW" 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ę tym samym podstawowym serwerem WWW.

 0
Author: Vic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-24 11:25:33

Middleware jak sama nazwa wskazuje, w rzeczywistości middleware jest sit between middle.. w środku czego? środek żądania i odpowiedzi..Jak request, response, express server siedzą w aplikacji express na tym obrazku możesz zobaczyć żądania pochodzą od klienta, a następnie Serwer express server obsługuje te żądania.. więc kopmy głębiej.. w rzeczywistości możemy podzielić całe zadanie tego serwera express na małe, oddzielne zadania, jak w ten sposób. Jak middleware siedzieć między żądaniem i response mały fragment części serwera wykonujący określone zadanie i przekazujący żądanie do następnego.. wreszcie wykonując wszystkie zadania odpowiedź została wykonana.. wszystkie middle ware mogą uzyskać dostęp do obiektu żądania, obiektu odpowiedzi i następnej funkcji cyklu odpowiedzi żądania..

Jest to dobry przykład do wyjaśnienia middleware w Expressie wideo youtube dla middleware
 0
Author: hasanga lakdinu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-18 10:22:59

Głupia prosta odpowiedź

Connect i Express to Serwery WWW dla nodejs. W przeciwieństwie do Apache i IIS, oba mogą używać tych samych modułów, zwanych "middleware".

 -7
Author: kmiles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55