To serwer, tak.
Aplikacja sieciowa node.js to pełnoprawny serwer WWW, taki jak Nginx czy Apache.
Rzeczywiście możesz obsługiwać swoją aplikację node.js bez korzystania z innego serwera WWW. Po prostu zmień swój kod na:
app = express();
http.createServer(app).listen(80);
Rzeczywiście, niektóre projekty używają node.js jako front- endowego systemu równoważenia obciążenia dla innych serwerów (w tym Apache).
Zauważ, że node.js nie jest jedynym stosem programistycznym, który to robi. Robią to również frameworki do tworzenia stron internetowych w Go, Java i Swift.
Czemu?
Na początku było CGI. CGI było w porządku i działało OK. Apache otrzymałby żądanie, stwierdził, że adres URL musi wykonać aplikację CGI, wykonać tę aplikację CGI i przekazać dane jako zmienne środowiskowe, odczytać standardowe wyjście i przesłać dane z powrotem do przeglądarki.
Problem w tym, że jest powolny. Jest OK, gdy aplikacja CGI była małym statycznie skompilowanym programem w C, ale grupa małych statycznie skompilowanych programów w C stała się trudna do utrzymania. Więc ludzie zaczęli pisać w językach skryptowych. Potem stało się to trudne do utrzymania i ludzie zaczęli tworzyć zorientowane obiektowo frameworki MVC. Teraz zaczęliśmy mieć kłopoty - KAŻDE ŻĄDANIE musi skompilować wszystkie te klasy i utworzyć wszystkie te obiekty tylko po to, aby obsłużyć jakiś HTML, nawet jeśli nie ma nic dynamicznego do obsłużenia (ponieważ framework musi dowiedzieć się, że nie ma nic dynamicznego do obsłużenia).
A co, jeśli nie musimy tworzyć wszystkich tych obiektów w każdym żądaniu?
Tak myśleli ludzie. Z próby rozwiązania tego problemu wyszło kilka strategii. Jednym z najwcześniejszych było osadzenie tłumaczy bezpośrednio na serwerach internetowych, takich jak mod_php
Apache. Skompilowane klasy i obiekty mogą być przechowywane w zmiennych globalnych, a zatem buforowane. Inną strategią było wykonanie wstępnej kompilacji. Kolejną strategią było uruchomienie aplikacji jako zwykłego procesu serwera i rozmowa z serwerem WWW przy użyciu niestandardowego protokołu, takiego jak FastCGI.
Następnie niektórzy programiści zaczęli po prostu używać HTTP jako protokołu aplikacji-> serwera. W efekcie aplikacja jest również serwerem HTTP. Zaletą tego jest to, że nie musisz implementować żadnego nowego, prawdopodobnie błędnego, prawdopodobnie nie przetestowanego protokołu i możesz debugować swoją aplikację bezpośrednio za pomocą przeglądarki internetowej (lub często curl
). I nie potrzebujesz zmodyfikowanego serwera internetowego do obsługi swojej aplikacji, po prostu dowolnego serwera internetowego, który może wykonywać odwrotne proxy lub przekierowania.
Dlaczego warto korzystać z Apache / Nginx?
Gdy udostępniasz aplikację node.js, pamiętaj, że jesteś autorem własnego serwera internetowego. Każdy potencjalny błąd w Twojej aplikacji to błąd, który można bezpośrednio wykorzystać w Internecie. Niektórym ludziom (słusznie) to nie odpowiada.
Dodanie warstwy Apache lub Nginx przed aplikacją node.js oznacza, że masz przetestowane w walce, zabezpieczone oprogramowanie w Internecie na żywo jako interfejs do Twojej aplikacji. Dodaje odrobinę opóźnienia (odwrotne proxy), ale większość uważa, że warto.
To była standardowa rada we wczesnych dniach node.js. Ale w dzisiejszych czasach istnieją również witryny i usługi internetowe, które udostępniają node.js bezpośrednio w Internecie. http.Server
Moduł jest teraz dość dobrze bitwa testowane w internecie można ufać.
Isn't it true that a Node.js based server (i.e. code) will still be placed within something like Nginx to run?
Nie, to nieprawda