Przewodnik dla początkujących do Node.js (JavaScript po stronie serwera)
Node.js - w prostych słowach - to JavaScript po stronie serwera. W dzisiejszych czasach robi się dużo hałasu. Jeśli o tym słyszałeś lub jesteś zainteresowany nauką i zdobyciem kilku rąk - ten post jest dla Ciebie.
Jaka jest zatem potrzeba korzystania z JavaScript na serwerze? Aby wyjaśnić koncepcję Node.js, chciałbym porównać ją ze zwykłymi językami po stronie serwera, takimi jak PHP. Node.js używa procedura wykonywania serwera oparta na zdarzeniach zamiast wielowątkowego wykonywania w PHP.
Aby wyjaśnić to dalej, będziemy rozmawiać o idei czym jest Node.js wraz z niektórymi propozycje dostawcy hostingu i wskazówki dotyczące instalacji. Wymagana jest znajomość języka JavaScript, jQuery i Ajax na poziomie średniozaawansowanym, ale podamy również przykłady ułatwiające zrozumienie całej sprawy, a nawet pracę nad nią, więc dowiedzmy się więcej o Node.js!
Rozważmy przypadek:
Rozważmy stronę internetową, na której należy dynamicznie ładować zawartość z innego serwera WWW, który jest wolny. W PHP możesz to zrobić na dwa sposoby - kodowanie go w prostym pliku i kodowanie go jako innego skryptu, następnie wykonanie go w podejściu wielowątkowym.
W pierwszej metodzie nawet jeśli kod jest prosty wykonanie zatrzymuje się na chwilę w miejscu, w którym dostęp do wolnego serwera jest dostępny. Druga metoda to bardziej zoptymalizowany w przypadku wydajności ale jest trudny do zakodowania i ma wielowątkowy narzut zarządzania. Przypadek jest podobny dla większości języków programowania WWW innych niż JavaScript po stronie serwera, tj. Node.js.
Jaka jest różnica w Node.js? Aby zrozumieć Node.js, musisz pamiętać o Programowanie oparte na zdarzeniach JavaScript w przeglądarce. Wykorzystujemy tutaj tę samą technologię. Zamiast używać osobnego wątku, a funkcja jest dołączona do zdarzenia końcowego z “wolny dostęp do serwera WWW” wspomniano powyżej, więc dostajesz pełna funkcjonalność w zoptymalizowanej drugiej opcji wspomnianej powyżej bez żadnego wielowątkowego narzutu.
Pierwsze kroki z Node.js
Node.js to JavaScript. Dlaczego nie możemy wykorzystać funkcjonalności opartej na zdarzeniach JavaScript w kliencie na serwerze? Ta myśl mogła doprowadzić do rozwoju Node.js.
Powiedział, że główną atrakcją Node.js - jest to asynchroniczne funkcje oparte na zdarzeniach. Używa pętla zdarzeń zamiast czekać na operacje we / wy (dostęp do zewnętrznej usługi internetowej, dostęp do sprzętu).
Node.js nadal mógł wykorzystać jego moc obliczeniową gdy serwer czeka na inną operację. To sprawia, że Node.js skalowalny do milionów jednoczesnych połączeń.
Jak działa JavaScript na serwerze?
Node.js działa w środowisku v8 - jest to maszyna wirtualna lub a Silnik JavaScript uruchamia kod JavaScript, więc do hostingu nie można używać zwykłych hostów internetowych. Będziesz potrzebował tych, które mają środowisko v8.
Oto kilka sugestii dostawcy dotyczących hostingu Node.js:
- Odlewnia chmur
- Cloudnode
- DotCloud
- Duostack
Instalowanie Node.js
Węzeł będzie działa idealnie w systemach operacyjnych Linux, Macintosh i Solaris. W systemie Windows można go zainstalować przy użyciu warstwy emulacji Cygwin. Żadna z kompilacji w systemie Windows nie jest zadowalająca, ale nadal można coś uruchomić.
Opcja 1: Budowanie węzła ze źródła.
Posługiwać się robić
zbudować i zainstalować node.js (wykonaj następujące czynności w linii poleceń). Git jest wymagany.
git clone --depth 1 git: //github.com/joyent/node.git cd węzeł checkout git v0.4.11 export JOBS = 2 mkdir ~ / local ./configure --prefix = $ HOME / local / node make make install echo 'export PATH = $ HOME / local / node / bin: $ PATH' >> ~ / .profile echo 'export NODE_PATH = $ HOME / local / node: $ HOME / local / node / lib / node_modules' >> ~ / .profile źródło ~ / .profile
Opcja 2: Instalacja Node.js z pakietu
Użytkownicy komputerów Mac mogą zainstalować Node.js jako pakiet z https://sites.google.com/site/nodejsmacosx/, co jest dość oczywiste.
Testowanie instalacji węzła
W celu sprawdzenia udanej instalacji Node możemy wypróbować bardzo prosty program konsoli „Hello World”. Utwórz plik o nazwie „test.js„i wpisz do niego następujący kod.
var sys = require („sys”); sys.puts („Hello World”);
Objaśnienie kodu:
Ładuje sys
klasa w zmienną sys
. Następnie używa sys
obiekt do wykonywania zadań konsoli. The sys.puts
jest poleceniem podobnym do cout
w C ++, więc aby uruchomić powyższy skrypt, przejdź do wiersza poleceń i uruchom go poleceniem poniżej:
węzeł test.js
Jeśli instalacja się powiedzie, na ekranie pojawi się wyjście hello world.
Tworzenie serwera HTTP
Teraz nadszedł czas, aby utworzyć „Hello World” za pośrednictwem serwera WWW za pomocą Node.js. Oto, co zamierzamy zrobić - my stwórz serwer, który generuje a “Witaj świecie” na localhost na porcie 8080 bez względu na adres URL, co daje Ci pojęcie, co zdarzenie jest.
Kody:
var sys = require ("sys"), my_http = require ("http"); my_http.createServer (funkcja (żądanie, odpowiedź) sys.puts ("Dostałem kopnięcie"); response.writeHeader (200, "Content-Type": "text / plain"); response.write ("Hello World "); response.end ();). listen (8080); sys.puts („Serwer działający na 8080”);
Objaśnienie kodu:
Najbardziej interesującą częścią Node.js jest programowanie oparte na zdarzeniach. Aby utworzyć serwer HTTP, potrzebujemy Biblioteka HTTP, więc idziemy do przodu i dodajemy go my_http
. Tworzymy serwer według funkcji:
my_http.createServer (funkcja (request, response) ). listen (8080);
Wykonywana jest funkcja podana jako pierwszy argument za każdym razem, gdy w porcie 8080 zostanie wyzwolone zdarzenie, więc sama funkcja sugeruje, aby węzeł nasłuchiwał zdarzenia w porcie 8080. Aby to wykryć, dodałem “Zostałem wyrzucony” wiadomość, która będzie wyświetlana na ekranie konsoli po otrzymaniu żądania.
The żądanie
obiekt zawiera wszystkie informacje o żądaniu złożonym na serwerze. Na przykład zawiera ciąg URL. The odpowiedź
obiekt jest obiektem, który obsługuje odpowiedź z serwera. Najpierw ustawiamy nagłówek odpowiedzi jako Zwykły tekst
treść, a następnie wyjścia “Witaj świecie“, następnie zakończ strumień wyjściowy. 200 to odpowiedź statusu.
Cóż, powyższy jest bardzo prostym przykładem, ale widzimy, że niezależnie od adresu URL podanego w przeglądarce dla tego samego serwera otrzymujemy takie same dane wyjściowe jak “Witaj świecie”.
Tworzenie prostego statycznego serwera plików
Stwórzmy prosty statyczny serwer plików w następnym samouczku.
Kody:
var sys = require („sys”), my_http = require („http”), ścieżka = require („ścieżka”), url = require („url”), filesys = require („fs”); my_http.createServer (funkcja (żądanie, odpowiedź) var moja_ścieżka = url.parse (request.url) .pathname; var full_path = ścieżka.join (process.cwd (), moja_ścieżka); ścieżka.exists (pełna_ścieżka, funkcja (istnieje ) if (! istnieje) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not Found n"); response.end (); else filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + „n”); response.end (); else response.writeHeader (200); response.write (plik, „binary”); response.end ();););). słuchaj (8080); sys.puts („Serwer działający na 8080”);
Objaśnienie kodów:
Powyższy kod jest dość prosty, omówimy go jako bloki.
var sys = require („sys”), my_http = require („http”), ścieżka = require („ścieżka”), url = require („url”), filesys = require („fs”);
Wszystkie te biblioteki są wymagane dla programu. Jego użycie będzie jasne w następującym kodzie.
var moja_ścieżka = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path);
The żądanie
obiekt ma szczegóły żądania, o czym mówiliśmy wcześniej. Używamy analizować
funkcja klasy URL, którą uwzględniliśmy, aby uzyskać nazwa ścieżki
adresu URL żądania. Po otrzymaniu nazwy ścieżki łączymy ją ze ścieżką bieżącego katalogu roboczego, aby uzyskać pełną ścieżkę do pliku.
Do łączenia adresów URL mamy funkcję o nazwie Przystąpić
w bibliotece ścieżek.
path.exists (pełna_ścieżka, funkcja (istnieje)
Po uzyskaniu pełnej ścieżki sprawdzamy, czy ścieżka istnieje przez funkcję istnieje
. Po zakończeniu sprawdzania funkcja wywołania zwrotnego jest wywoływana i przekazywana jako drugi argument.
if (! istnieje) response.writeHeader (404, "Content-Type": "text / plain"); response.write („404 Not Found n”); response.end (); else filesys.readFile (pełna_ścieżka, "binarny", funkcja (err, plik) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write ( err + "n"); response.end (); else response.writeHeader (200); response.write (plik, "binary"); response.end (););
Teraz w funkcji wywołania zwrotnego, jeśli plik nie istnieje, wysyłamy „Nie znaleziono strony 404„błąd.
Jeśli strona zostanie znaleziona, odczytujemy plik przez readFile
funkcja w systemie plików. Możemy również zobaczyć funkcję wywołania zwrotnego dla readFile
zdefiniowana tam sama funkcja. Jeśli nie ma błędu w odczycie pliku, zostanie on wyświetlony. Jeśli wystąpi błąd, zwracany jest stan 500 z tekstem błędu.
Polecam również zawijanie kodów z poprzedniego samouczka w funkcję, dzięki czemu można go używać w następnym samouczku lub do wykorzystania w przyszłości.
var sys = require („sys”), my_http = require („http”), ścieżka = require („ścieżka”), url = require („url”), filesys = require („fs”); my_http.createServer (funkcja (żądanie, odpowiedź) var moja_ścieżka = url.parse (request.url) .pathname; var full_path = ścieżka.join (process.cwd (), moja_ścieżka); ścieżka.exists (pełna_ścieżka, funkcja (istnieje ) if (! istnieje) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not Found n"); response.end (); else filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + „n”); response.end (); else response.writeHeader (200); response.write (plik, „binary”); response.end (););); my_http. createServer (funkcja (żądanie, odpowiedź) var my_path = url.parse (request.url) .pathname; load_file (my_path, response);). listen (8080); sys.puts ("Server uruchomiony na 8080");
Bądźcie czujni !
To wszystko. Mam nadzieję, że daje to dobry pomysł na Node.js. W następnym artykule pokażę ci, jak to zrobić ładuj i wyświetlaj liczbę polubień Facebooka za pomocą Node.js. Bądźcie czujni!
Nota redaktora: Ten wpis jest napisany przez Geo Paul dla Hongkiat.com. Geo to niezależny programista WWW / iPhone, który lubi pracować z PHP, Codeigniter, WordPress, jQuery i Ajax. Ma 4 lata doświadczenia w PHP i 2 lata doświadczenia w tworzeniu aplikacji iniPhone.