w Praktyce
10 godz. 44 min · Node.js · Full-stack i Programowanie
Piotr PalarzWeb DeveloperW kursie tym poznasz platformę Node.js od podstaw, aż po bardziej zaawansowane koncepcje. Zaczniemy od omówienia czym jest Node, a także jakie może być zastosowanie tej technologii. Następnie przejdziemy przez proces instalacji i napisanie swojego pierwszego skryptu. Już na samym początku dokładnie omówimy tworzenie własnych modułów, gdyż jest to wiedza niezbędna, by dobrze zrozumieć funkcjonowanie Node. Następnie dowiesz się czym są zdarzenia, jak działa model “publish / subscribe”, a także czym jest “event-driven development”. Chwilę później omówimy pracę z buforami, stream’ami, a także ze standardowym wejściem i wyjściem. Ta wiedza pozwoli Ci zrozumieć jak tworzone aplikacje mogą otrzymywać od użytkownika dane oraz jak je wyświetlają.
Niezwykle ważnym rozdziałem będzie ten, poświęcony pracy z systemem plików. Szczególnie dla dewelopera, pracującego dotychczas z językiem JavaScript wyłącznie w środowisku przeglądarki internetowej. Node pozwala bowiem tworzyć nowe pliki, zapisywać w nich dane oraz odczytywać i usuwać pliki i katalogi. Przy wszystkich tych operacjach, niezwykle ważna jest jednak asynchroniczna natura Node. Dowiesz się jak działa, a także jakie są jej zalety. Na tym etapie nie zabraknie oczywiście praktycznego projektu, którym będzie aplikacja typu CLI (Command Line Interface). Pozwoli nam ona grupowo zmienić nazwy wielu plików, według podanego wzorca.
W kolejnym rozdziale poruszymy fundamentalną dla Node kwestię, mianowicie tworzenie serwerów sieciowych. Zaczniemy od najniższego poziomu, tworząc prosty serwer bazujący na protokole TCP/IP. Wiedza w jaki sposób Node radzi sobie z takim zadaniem, pozwoli później lepiej zrozumieć wyższe warstwy, takie jak np. HTTP czy WebSockets. Chwilę później stworzymy swój pierwszy serwer HTTP, do którego będzie można wysyłać zapytania wprost z przeglądarki internetowej. Omówimy również jak w Node wykorzystać bezpieczne szyfrowanie HTTPS.Na tym etapie będziesz już miał solidną wiedzę jak pracować z Node, jednak zanim przejdziemy dalej, zatrzymamy się, by omówić jak dokładnie działa Node.js, a także jak ta platforma została zbudowana. Dwie dość obszerne lekcje, będą być może jednymi z najważniejszych w tym kursie. Dowiesz się w nich czym jest, a także jak działa jednowątkowa pętla zdarzeń, czym jest proces i wątek, a także zobaczysz kod źródłowy Node.js i wszystkie bloki budulcowe, z jakich Node się składa. To naszym zdaniem niezwykle ważny temat, często jednak pomijany w wielu materiałach. Dzięki dogłębnemu zrozumieniu jednowątkowej natury języka JavaScript i asynchroniczności Node, będziesz mógł tworzyć dużo lepsze aplikacje.
Node.js posiada kilkanaście wbudowanych modułów, z których w dowolnej chwili można skorzystać. Wszystkie jednak dają nam dużą, niskopoziomową kontrolę, ale czasami sporo kodu należy napisać, by zrealizować jakieś zadanie. Jest to jednak świadomy wybór twórców Node, gdyż całą resztę świetnych rozwiązań, dopisuje nieustannie ogólnoświatowa społeczność deweloperów. Zdecydowana większość z modułów ląduje w rejestrze npm. Jest to genialny package manager, który pozwoli nam wyszukiwać, pobierać i aktualizować niezliczoną ilość modułów. Dowiesz się zatem jak korzystać z npm, a chwilę później zaczniemy wykorzystywać zgromadzone tam moduły w dalszej pracy.Jednym z najpopularniejszych modułów jest express.js, który pozwala w bardzo prosty sposób tworzyć serwery HTTP. Grzechem byłoby zatem z niego nie skorzystać. Dowiesz się wszystkiego co niezbędne, by zacząć tworzyć własne aplikacje bazujące na protokole HTTP z użyciem express.js, a także kilku dodatków do tego systemu. Zobaczysz jak routować zapytania, jak korzystać z middleware czy serwować statyczne pliki. Następnie omówimy współpracę z bazą danych MongoDB i z jej wykorzystaniem stworzymy API typu REST. Stworzona aplikacja pozwoli odczytywać dane z bazy i przesyłać je do klienta w formacie JSON, a także dodawać nowe dane, aktualizować i usuwać je. Wszystko to zgodnie z dobrymi praktykami pracy z REST.
Chwilę później czeka Cię kolejny praktyczny projekt - skracacz linków. Stworzymy wspólnie aplikację, która pozwoli skrócić dowolny adres URL do krótkiej formy. Oczywiście będzie działać również w drugą stronę! Kiedy przejdziemy pod skrócony adres, przekieruje nas do odpowiedniej witryny. Node.js to platforma wręcz stworzona do tworzenia aplikacji typu real-time, dlatego w kolejnym rodziale podejmiemy temat technologii WebSockets. Dowiesz się jakie są jej zalety, a także jak pracować z nią po stronie serwera i klienta. Tutaj czeka nas kolejny praktyczny, niezwykle ciekawy projekt. Wykonamy bowiem czat grupowy. Aplikacja ta pozwoli dowolnej ilości użytkowników podłączyć się do czatu podając swój nick, a następnie wysyłać widoczne dla wszystkich wiadomości. Zaimplementujemy nawet takie rozwiązania jak wyświetlanie statusów o dołączeniu kogoś do czatu, a także o jego opuszczeniu.W przedostatnim rodziale tego kursu podejmiemy tematykę dobrych praktyk pracy z Node.js. Na początku omówimy najważniejsze konstrukcje nowej specyfikacji EcmaScript 2015, które są znakomicie wspierane w Node. Chwilę później omówimy jak korzystanie z Promises uprości, a także ulepszy nasz kod. Wśród dobrych praktyk nie zabraknie również informacji o debugowaniu aplikacji. Zobaczysz sprawdzone sposoby, by znaleźć błędy lub lepiej, krok po kroku, zrozumieć jak działa napisany wcześniej kod. Dowiesz się również jak pracować z błędami, by Twoje aplikacje działały w sposób przewidywalny.
Ostatni rozdział w całości został poświęcony temu, co zwykle jest pomijane w innych materiałach, mianowicie wdrażaniu aplikacji do produkcji. Przez cały ten kurs pracować będziemy lokalnie, lecz kiedy aplikacje są już gotowe, wypadałoby udostępnić je światu. Wdrażanie aplikacji napisanych z użyciem Node.js nie jest jednak tak oczywiste, jak np. wgrywanie WordPress’a u wybranego hostingodawcy. Ty będziesz miał jednak możliwość zobaczyć, jak wdrożyć napisany przez nas grupowy czat na platformie Heroku. Jest to bardzo popularny serwis działający jako PaaS (Platform as a Service). Za darmo będziesz mógł w ciągu kilku chwil uruchomić swoją aplikację.Zobaczysz o co należy zadbać, by wszystko poszło gładko. Serwisy typu PaaS dbają o bardzo wiele aspektów wdrażania i serwowania naszych aplikacji, takich jak bezpieczeństwo oraz nieustanną dostępność. Mają jednak pewne ograniczenia. Z tego powodu, dowiesz się również jak wdrożyć swoją aplikację na serwerze wirtualnym VPS z systemem Ubuntu Server. Takie rozwiązanie daje nam całkowitą kontrolę, ale także obarczone jest większą odpowiedzialnością. Zaczniemy od instalacji na serwerze platformy Node.js, systemu kontroli wersji GIT, a także innych niezbędnych modułów
Następnie zobaczysz jak skonfigurować swoje lokalne środowisko tak, by za pomocą GIT’a wysyłać kod do zdalnego serwera, a potem jednym poleceniem wdrażać go do produkcji. Dowiesz się również jak jednocześnie serwować wersję produkcyjną oraz developmencką. W rodziale tym poruszymy również inne kwestie, takie jak procesy potomne czy tworzenie klastrów. Dzięki tej wiedzy, będziesz mógł maksymalnie wykorzystać dostępne zasoby serwera. Na sam koniec tego kursu rzucimy okiem również na inne, nie przedstawione wcześniej zastosowania Node, a także nakreślimy dalszą drogę nauki w tym zakresie.
Kurs ten jest dla wszystkich osób, które dobrze czują się w technologiach frontendowych, tj. HTML, CSS i JavaScript, a teraz chcą rozpocząć swoją przygodę z back-endem. Im zatem lepiej znasz język JavaScript, tym więcej wyciśniesz z Node, natomiast nie jest wymagana bardzo zaawansowana wiedza z zakresu tego języka.
W tej lekcji odpowiemy na pytanie, czym jest Node.
Node.js jest to otwarte, wieloplatformowe środowisko uruchomieniowe dla aplikacji napisanych w języku
JavaScript.
Dzięki temu, że korzysta z silnika V8 od Google, pozwala tworzyć aplikacje uruchamiane poza przeglądarką internetową,
na komputerze lub na serwerze. A więc najprościej mówiąc, jest to swego rodzaju program komputerowy, który
pozwala nam wykonywać kod JavaScript, ale poza przeglądarką internetową i tenże program zawiera w sobie
m.in. silnik V8, który stworzyła firma Google, i który jest również zawarty między innymi w przeglądarce
Google Chrome.
A jest to nic innego jak interpreter języka JavaScript. Natomiast Node.js jest czymś więcej, dlatego że oprócz
silnika V8 ma również swoje moduły, które zostały do niego dopisane i jako całość tworzy platformę
Node. Rzućmy okiem na zalety i zastosowanie Node.js.
Niewątpliwą zaletą tej platformy jest jej szybkość.
Oczywiście tutaj wszystko zależy od tego, jak coś zaprogramujemy i co będziemy chcieli wykonać.
Niemniej jednak w porównaniu z innymi językami programowania, takimi jak np. PHP, w wielu zastosowaniach Node.js
jest znacznie szybszy.
W parze z szybkością idzie możliwość obsłużenia dużej liczby zapytań na sekundę i tutaj mówimy już w takiej
konfiguracji, gdzie Node.js będzie działał jako serwer np. HTTP.
I tutaj, mając na myśli dużej liczby zapytań, mam tak naprawdę na myśli ogromne ilości zapytań, nawet kilkanaście
tysięcy zapytań na sekundę.
Tyle może obsługiwać serwer napisany w Node.js. Czymś, co zdecydowanie wyróżnia platformę Node.js na tle innych
platform czy innych języków programowania,
chociaż zapamiętaj, że Node.js nie jest językiem programowania,
jest taka cecha, mianowicie nieblokujące operacje input/output.
W największym skrócie wygląda to w ten sposób, że powiedzmy, chcemy otworzyć jakiś plik i odczytać jego
dane i następnie coś z nimi zrobić,
to standardowo np. w PHP moglibyśmy utworzyć zmienną i wywołać funkcję, która odczyta taki plik i wstawi
nam zawartość tego pliku można powiedzieć do pamięci pod tą zmienną.
Kiedy to się wykona, przejdziemy tak naprawdę do kolejnej linijki wykonywania kodu.
W przypadku nieblokujących operacji będzie to wyglądać nieco inaczej, mianowicie będziemy mogli oddelegować
wykonanie się pewnej funkcji callback dopiero wtedy, kiedy taki plik zostanie otwarty i kiedy dane zostaną
z niego odczytane.
W momencie, kiedy będziemy czekać na odczyt takich danych, możemy wykonywać inny kod czy obsługiwać kolejne
zapytania.
Dzięki temu Node.js działa bardzo, bardzo szybko. Możesz sobie taką operację porównać do wysłania zapytania
AJAX. Kiedy piszemy skrypt JavaScript dla przeglądarki internetowej, wysyłamy takie zapytanie i możemy wykonywać
inny kod,
a kiedy serwer odeśle nam odpowiedź, dopiero wtedy wykonujemy sobie funkcję callback z danymi odesłanymi do serwera.
Bardzo podobnie działa to w przypadku Node z różnymi operacjami na plikach lub np. na bazach danych.
Kolejną cechą Node.js jest bardzo małe zużycie pamięci.
Nawet jeżeli będziemy mieli kilka tysięcy podłączonych klientów jednocześnie, to zużycie pamięci operacyjnej
systemu będzie niewielkie.
Dlaczego tak się dzieje?
Powiem ci później w kursie, kiedy będziesz już wiedział, jak wygląda praca z Node i wtedy omówimy, jak dokładnie
został zbudowany i w jaki sposób działa. I wtedy dowiesz się m.in. dlaczego zużywa mało pamięci. I ostatnią
z zalet, którą tutaj wypisałem, jest ogromna liczba modułów stworzonych przez społeczność. Node.js ma już kilka
lat.
Jest to technologia na tyle dojrzała, że powstało bardzo wiele modułów, które rozszerzają funkcjonalności
Node.js, a więc bardzo rzadko będziemy musieli coś pisać
całkowicie od zera. Zazwyczaj będziemy korzystać ze świetnych modułów, które zostały już stworzone, i które
cały czas są udoskonalane i rozwijane razem z tym, jak powstają czy są wypuszczane kolejne wersje Node.js.
Node.js nie jest jednak technologią, która w stu procentach zastąpi nam inne technologie, takie jak np. PHP.
Rzućmy teraz okiem na takie najczęstsze zastosowanie Node. Przede wszystkim dla aplikacji sieciowych typu
real-time, a więc takich, które będą nam serwować jakieś dane, na przykład mogą to być czaty.
Wyobraź sobie, że stworzymy sobie taki czat, w którym wiele osób może się ze sobą komunikować.
Tutaj świetnym do tego narzędziem będzie Node.js albo na przykład aplikacji wyświetlających nam na żywo jakieś dane
z giełdy lub też pogodę.
Node będzie bardzo dobre dla aplikacji, które nie wymagają dużych zasobów CPU, czyli procesora.
Dlaczego? O tym dowiesz się później w tym kursie.
Idealnym zastosowaniem Node będzie tworzenie API typu REST.
Jeżeli nie wiesz jeszcze, jak działa REST, to później również ci to pokażę i będziemy mogli tworzyć API,
które będą działać na protokole HTTP i można je wykorzystywać na stronach czy aplikacjach internetowych,
ale także w przypadku aplikacji mobilnych, które mogą się łączyć z takim API i pobierać z niego jakieś
dane.
Możemy stworzyć również aplikację typu Command Line Interface, a więc takie, które będą uruchamiane z
wiersza poleceń.
W ten sposób możemy sobie stworzyć jakieś programy, które będziemy uruchamiać na swoim komputerze, które
po prostu przyspieszą jakąś pracę lub powiedzmy pomogą nam zeskalować obrazki, a więc nie zawsze Node.js
musi działać jako serwer.
Możemy również stworzyć sobie aplikację typu Command Line Interface. Jeszcze jednym ciekawym zastosowaniem
Node jest tworzenie aplikacji desktopowych z użyciem HTML, CSS JavaScript i NW.js. NW.js jest to taki projekt,
który pozwala nam - tak jak tutaj napisałem - tworzyć programy komputerowe, które będą uruchamiane np. w
Windowsie czy na Macu
z pomocą znanych nam już technologii.
Na koniec rzućmy jeszcze okiem na historię projektu Node.js. A więc Node powstał w 2009 roku a jego twórcą
jest Ryan Dahl. I teraz chciałbym ci pokazać fragment oryginalnej prezentacji Node.js z 2009 roku, po której autor Node.js
dostał owacje na stojąco.
Natomiast we wspomnianym fragmencie padają ważne słowa
Ang.
Ang.
Ang.
Ang.
Ang.
Polecam ci obejrzenie całej tej prezentacji.
Adres masz poniżej.
Natomiast to, co jest ważne, co tutaj powiedział Ryan, to fakt, że starał się, tworząc Node, wykorzystywać
już to, co znamy, dlatego że najczęściej do tej technologii będziemy przechodzić z bycia front- end deweloperem,
a więc wtedy kiedy tworzymy jakieś strony i aplikacje w HTML, CSS i JavaScript i przechodzimy do back-endu,
czyli właśnie do korzystania z Node. A więc aby to przejście było jak najmniej bolesne,
to tak jak tutaj autor Node wspomniał, na przykład takie funkcje jak setTimeout nazwał dokładnie w taki
sam sposób jak w przeglądarkach internetowych. Bo mam nadzieję, że na tym etapie wiesz, że funkcja
setTimeout czy setIntervale w JavaSctipt tak naprawdę nie są częścią oficjalnej specyfikacji ECMAScript.
Więc można powiedzieć, że nie są częścią JavaScript, ale przeglądarki je implementują. I podobnie w przypadku
Node Ryan
na samym początku, kiedy stworzył Node, również zaimplementował takie funkcje i nazwał je dokładnie tak samo
jak w przeglądarkach internetowych, aby było nam łatwiej pracować.
Natomiast kolejną ważną rzeczą, którą tutaj wspomniał z kolei jest fakt, że funkcje, które będą nam służyć
m.in. do pracy z systemem plików, wykorzystują takie konwencje systemów UNIX, które są znane m.in.
użytkownikom Linuksa czy np. systemu Mac OS.
A więc jeżeli kiedykolwiek w terminalu wpisywałeś takie polecenie, jak mkdir, aby stworzyć nowy katalog,
to w Node.js znajdziesz wiele podobnych funkcji, które właśnie mają te nazwy
można powiedzieć skopiowane z tych systemów UNIX.
Dzięki temu łatwiej również jest się w tym wszystkim odnaleźć.
Zobaczmy, co było później. W 2010 roku powstała pierwsza wersja package managera, który nazywa się npm
i później o nim również będziemy mówić. W 2011 roku
Microsoft wraz z firmą Joyent, która sprawowała pieczę nad Node, wypuszczają pierwszą wersję Node.js dla Windowsa.
W 2012 roku Ryan Dahl odsuwa się od projektu i przekazuje go w ręce twórcy npm.
W 2014 roku powstaje bliźniaczy projekt o nazwie io.js. Była to kopia Node.js.
I ten projekt zakładał szybszy cykl wydawania nowych wersji, w tym również za każdym razem gdy Google
wyda nową wersję silnika V8.
Wówczas zmienił się również lider projektu Node.js. Natomiast w 2015 roku powstała Node.js Foundation i zostały
połączone wersje 0.12 Node.js z wersją 3.3 io.js i została wydana wspólna wersja Node oznaczona numerem 4.0.
I od teraz mamy już tylko Node.js.
Nie ma już tego projektu io.js.
Jeżeli nie jesteś jeszcze przekonany do tego, czy warto zacząć się uczyć Node, to zobacz, jakie wielkie
firmy korzystają z tej technologii.
Jak zatem widzisz, nie są to jakieś małe, przypadkowe, nieznane firmy, ale same wielkie nazwy, które mają
ogromne działy technologiczne.
I skoro takie firmy korzystają z Node, to znaczy, że coś w tej technologii być musi.
Aby poznać Node, należy zrozumieć, w jaki sposób został zbudowany.
A takie główne bloki budulcowe Node
jest to silnik V8, o którym wspominaliśmy, czyli jest to silnik,
inaczej mówiąc, interpreter języka JavaScript napisany przez firmę Google i rozwijany przez tę firmę.
Następnie twórca Node.js do tego silnika dopisał sobie swoje moduły z użyciem języka C++, a później na
ostatniej warstwie dopisał jeszcze trochę modułów w JavaScript.
I to wszystko opakowane razem tworzy Node.js.
Na razie być może jest to trudne do zrozumienia, ale dalej w tym kursie zobaczysz dokładnie, jak Node został
zbudowany i również zajrzymy do kodu źródłowego tego projektu.
Ale jak wspomniałem - o tym będzie później. Wiesz już mniej więcej, jak wygląda Node.js i jakie może mieć zastosowania.
Dlatego w kolejnej lekcji pokażę ci, jak zainstalować tę platformę dla twojego wybranego systemu operacyjnego
i będziemy mogli zacząć pracę i poznawanie tej technologii.