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.
Gratulacje! Dobrnąłeś do końca tego kursu! Natomiast teraz w twojej głowie mogło pojawić się pytanie: co
dalej?
Po pierwsze aby móc się nazywać pełnoprawnym Node.js deweloperem, musisz pobrać sobie tapetę na swój pulpit, którą
znajdziesz pod takim adresem.
No i zobacz, jak ona wygląda u mnie.
Przyznasz, że całkiem nieźle, prawda?
Oczywiście to tylko żart, natomiast możesz sobie taką tapetę pobrać - wygląda bardzo fajnie - i z większą
pewnością siebie pójść dalej.
A co jest dalej?
Mógłbyś zapytać.
Otóż zakładam, że większość osób, które wchodzą w świat Node.js dotychczas były front-end deweloperami, a więc
osobami, które zajmowały się tym, co dzieje się po stronie klienta, a więc HTML, CSS i JavaScript.
Z uwagi jednak na fakt, że Node.js pozwala nam tworzyć kod back-end w JavaScript, to przejście od front-end dewelopera do back-end
dewelopera zazwyczaj nie jest aż tak bolesne jak w przypadku innych języków i jest bardzo satysfakcjonujące.
Jak zatem nazwiemy osobę, która zajmuje się zarówno front-endem, jak i back-endem?
Otóż mamy już takie stanowisko, jest to full stack web developer.
Mamy zatem front-end i do tego dodajemy back-end, czyli to, co dzieje się na serwerze, i możemy się takim
mianem określać.
Natomiast co tak naprawdę powinniśmy znać z tych technologii serwerowych?
Po pierwsze pisanie serwerów, tworzenie kodu po stronie serwera - i to robiliśmy w tym kursie.
Po drugie powinniśmy mieć wiedzę z zakresu baz danych i w tym kursie korzystaliśmy z bazy danych MongoDB,
natomiast nie było czasu na to, aby tłumaczyć wszystko bardzo dokładnie
czy żeby poruszyć jeszcze inne zagadnienia związane z bazami danych.
Niemniej jednak połączenie z bazami danych i praca z nimi w Node zazwyczaj jest bardzo prosta.
No ale musimy rozumieć, jak działają poszczególne bazy danych.
Ja w tym momencie planuję wydać na eduweb.pl kurs z NoSQL-owych baz danych, który się pojawi.
Być może w momencie, kiedy mnie słuchasz, ten kurs już jest. I będę tam chciał pokazać, jak współpracują takie
bazy danych właśnie z Node.js. Bo świetnie to się w ten stack wpisuje.
Co jeszcze powinniśmy wiedzieć jako full stack web developer?
Powinniśmy potrafić wdrożyć naszą aplikację do produkcji. Pokazałem ci również podstawy tego w tym kursie.
I na koniec powinniśmy mieć również jakąś wiedzę z zakresu administracji serwerem.
Musisz wiedzieć, że stanowiska full stack web developerów są bardzo dobrze płatne - to po pierwsze. A po drugie
takie osoby są rozchwytywane.
Natomiast ja zazwyczaj na to patrzę z mojej perspektywy i ty może spojrzysz z twojej perspektywy dokładnie
tak samo.
Mianowicie nie na to, czy stanowisko jest rozchwytywane, czy nie, ale na samą satysfakcję, jaką masz z
tego, że potrafisz coś zrobić od początku do końca - mianowicie i po stronie klienta, i po stronie serwera.
Jeśli zatem spodobało ci się pisanie również serwerów i chcesz iść w tym kierunku, to teraz będę chciał
ci pokazać, gdzie możesz znaleźć dodatkowe informacje.
Oczywiście oprócz tego, że warto cały czas śledzić eduweb.pl, gdzie będą kolejne materiały w tym zakresie
się pojawiać.
Na początek chciałbym ci polecić mój inny kurs, który nazywa się Nowoczesne aplikacje webowe
w Backbone.js
I w nim piszemy pełną aplikację od początku do końca, zarówno jeżeli chodzi o front-end, jak i back-end.
Czyli taka aplikacja jest tworzona właśnie przez full stack web developerów. W tym kursie poruszam dosyć dokładnie,
jak działa MongoDB.
Jak ją zainstalować i jak z niej korzystać w Node z użyciem natywnego sterownika.
W tym natomiast kursie zobaczyłeś, jak korzystać z Mongoose.js, która opakowuje ten natywny sterownik i
możemy w jeszcze przyjemniejszy sposób pracować.
Kurs, który widzisz teraz na ekranie, był trochę bardziej nastawiony na front-end niż na back-end, chociaż tak
jak wspomniałem, stworzyliśmy tam wszystko.
Ale mając już wiedzę z tego kursu Node.js, ten serwer, który we wspomnianym kursie tworzymy, będziesz mógł
stworzyć w sposób trochę lepszy.
Natomiast tutaj będziesz mógł się nauczyć, w jaki sposób działa Backbone.js po stronie klienta. I żeby
nie przedłużać
po prostu jeżeli jesteś zainteresowany, kliknij sobie tutaj, zobacz prezentację aplikacji. Jest to filmik,
w którym pokazuję dokładnie, jak działa aplikacja, którą stworzymy w kursie.
Jeżeli ci się to spodoba, będziesz chciał ją od zera również napisać, to zachęcam cię do tego kursu.
Pozostając w tematyce full stack web developmentu,
mamy również coś co nazywa się MEAN.js lub inaczej mówiąc MEAN Stack.
To jest właśnie taki stack, który pozwala nam tworzyć aplikacje, które są zarówno po stronie klienta
pisane, jak i po stronie serwera.
I tutaj MEAN oznacza MongoDB, Express, Angular i Node.
Wiesz już, jak działa Express.
Wiesz, jak działa Node. MongoDB również zobaczyłeś. Możesz również więcej się o tym dowiedzieć w
kursie, który przed momentem ci pokazywałem. A Angular również jest poruszony na eduweb.pl
w osobnym kursie, więc możesz tak naprawdę nauczyć się wszystkich tych technologii.
Natomiast z samego MEAN Stack również planujemy kolejne materiały.
Powiedziałem ci również, full stack web deweloper powinien dosyć dobrze znać różne systemy baz danych, dlatego
teraz pokażę ci te najważniejsze. Są to akurat NoSQL-owe bazy danych, czyli nierelacyjne, bo z takimi najlepiej
się pracuje.
Jedną z nich już widziałeś. Jest to MongoDB. Możesz więcej o niej dowiedzieć się na stronie
mongodb.com.
Natomiast kolejną z takich bardzo ciekawych baz jest CouchDB.
I co jest ciekawe, to ta baza danych wykorzystuje protokoł HTTP, czyli będziemy korzystać z takiego API REST,
podobnego jak tworzyliśmy w tym kursie, aby łączyć się z taką bazą danych i wykonywać na niej
wszystkie operacje.
Oczywiście nie zabraknie sterownika dla Node.js i niezliczonej liczby modułów w npm, z których możesz korzystać.
Więc polecam ci również z taką bazą danych się zapoznać.
Kolejną z baz danych, o której wspominałem w tym kursie, jest Redis.
I z kolei Redis
jest to baza danych, która przechowuje całe swoje dane w pamięci operacyjnej. Dlatego jest niesłychanie
szybka i polecam ci z niej korzystać np. do przechowywania sesji użytkowników, którzy są zalogowani,
lub innych danych - szczególnie w takim przypadku, gdzie pokazałem ci klastry, gdzie mieliśmy uruchomionych
kilka serwerów i chcielibyśmy, aby one wszystkie miały dostęp do jednego miejsca, do bazy danych.
Redis może być do tego dobrym zastosowaniem.
Kolejna baza danych jest to Cassandra. I to jest z kolei prawdziwy kombajn, dlatego że ta baza danych potrafi
obsłużyć ogromne ilości danych.
Zauważ, co jest napisane tutaj, pod tym nagłówkiem SCALABLE. Jest napisane, że niektóre serwery produkcyjne Apple
mają ponad 75 tysięcy węzłów, czyli takich jakby niezależnych baz danych, które tak naprawdę współpracują
jako jedna cała baza danych.
Niesamowite, prawda?
I choć baz danych jest cała masa, to na koniec chcę ci wspomnieć tylko o jeszcze jednej. I zauważ, że każda
z nich tak naprawdę ma troszeczkę inne zastosowanie. Bo RethinkDB
jest to baza danych stworzona dla, jak tutaj jest napisane, realtime web.
Widziałeś już w tym kursie, szczególnie przy WebSockets, że Node.js jest świetny do aplikacji typu realtime.
A kiedy połączymy go z taką bazą danych jak RethinkDB, to jest już prawdziwy kombajn, który naprawdę bije
na głowę inne zastosowania typu PHP właśnie do takich zastosowań typu realtime. RethinkDB jest to
baza danych, która potrafi nam wysyłać dane, kiedy je otrzyma.
Czyli jeżeli coś zapiszemy do bazy danych, to ona może automatycznie wysłać to do klientów i możemy coś
z tymi danymi zrobić.
Jak wspominałem, planuję zrobić kurs, w którym omówię kilka z tych najważniejszych baz danych, natomiast jeżeli
jesteś ciekaw, to już teraz na własną rękę się z nimi zapoznaj.
Na koniec chcę ci jeszcze pokazać świetne repozytorium na GitHubie, gdzie są spisane najlepsze moduły czy
najlepsze praktyki - w ogóle najlepsze zasoby, jeżeli chodzi o Node.
Możesz przejść do tej strony, wpisując w przeglądarce node.cool.
I tutaj naprawdę jest tego masa. Polecam się z tym zapoznać.
Mamy tutaj krótki spis treści, chociaż w zasadzie nawet nie taki krótki.
Ale później mamy odpowiednie nagłówki, które mówią nam, z czym mamy do czynienia, na przykład Command-line apps.
Możemy tutaj sobie zerknąć, co tutaj jest: functional programming, tutaj mamy np. najważniejsze moduły odpowiedzialne
za HTTP. Zauważ, że my korzystaliśmy np. z Expressa, ale tutaj są wypisane jeszcze inne.
Oczywiście warto się z nimi zapoznać. Przynajmniej zobaczyć ich opisy na stronach tych projektów.
Mamy nagłówek tutaj odpowiedzialny za debugging. Pokazywałem ci, jak debuggować, ale tutaj znajdziesz
jeszcze wiele innych modułów i wiele ciekawych informacji. Jak widzisz, gdybyśmy sobie tutaj skrolowali, to mamy
tak naprawdę sporo tutaj różnych rzeczy i warto sobie przynajmniej te nagłówki poczytać, bo to już w
głowie gdzieś zostaje,
co jeszcze innego można robić z Node.
Jak widzisz, nawet tutaj jeśli chodzi o Promises mamy kilka różnych ciekawych modułów, które ktoś tutaj
uznał za ważne, za dobre i
tutaj po prostu wypisał.
Zatem jeśli tylko jesteś głodny dalszej wiedzy, koniecznie tutaj zajrzyj. I ostatnia rzecz, którą chciałbym ci
pokazać, jest to w Node Package Managerze. Pod takim adresem - npmjs.com/browse/star, czyli te najważniejsze,
oznaczone gwiazdką czy najlepiej ocenione
znajdziesz właśnie moduły, które są najlepiej oceniane czy najczęściej pobierane. To tutaj również może
ci sporo powiedzieć o tym, z których modułów warto korzystać i czego się w pierwszej kolejności uczyć.
Jak widzisz, Express jest tutaj na samej górze. Ale mamy również Gulpa, o którym mówiłem ci w tym kursie.
Mam zatem nadzieję, że troszkę chociaż nakreśliłem ci, gdzie możesz pójść dalej, czego możesz się uczyć. Ale przede wszystkim
mam ogromną nadzieję, że masz już te porządne fundamenty
w pracy z Node.js i że dobrze rozumiesz tę technologię.
Jeżeli nie, to wracaj jeszcze sobie do różnych lekcji tego kursu i je powtarzaj.
Mam nadzieję, że wtedy na pewno wszystko dobrze zrozumiesz.