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ć?
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 ' aServer
. 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.
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:
- może obsłużyć żądanie i zwrócić odpowiedź. To dlatego, że w zasadzie otrzymujesz tę funkcję
- 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.]}
- może być zarejestrowany w
createServer
Jak connect, ponieważ to też jest tylko funkcja, która możereq
/res
para (źródło). - A użyj funkcji do rejestracji middleware.
- 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.
- posiada obsługę silnika widoku .
- Has top level verbs (get/post itp.) dla jego router .
- 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:
Źle. To nie rozszerza go i jak widzieliście ... używa goKtóry dziedziczy rozszerzoną wersję http.Serwer
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
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.
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.
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ą.
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] }.
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.
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 middlewareWarning: 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".
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