Lekce 1 - Úvod do Node.js

JavaScript Node.js Úvod do Node.js

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u první lekce online kurzu o tvorbě webových aplikací v javascriptovém běhovém prostředí Node.js. V dnešním tutoriálu si prostředí představíme a nainstalujeme. Nakonec si zkusíme napsat i svou první aplikaci.

Úvod do Node.js

Node.js online kurz

Node.js je prostředí umožňující spouštět JavaScript kód mimo webový prohlížeč. Je postaveno na Chrome V8 JavaScript enginu, takže základ tohoto JS prostředí je stejný jako ve webovém prohlížeči Google Chrome. Důležité je říci, že byť v tomto prostředí můžete psát ledacos, jeho návrh a primární účel je tvorba serverové části webových aplikací. Toto má společné např. s jazykem PHP, který má stejné zaměření. JavaScript se tedy díky tomuto prostředí dá používat i na serveru a ne jen na druhém konci, u klienta. Avšak na rozdíl např. od zmíněného PHP je v Node.js kladen důraz na vysokou škálovatelnost, tzn. schopnost obsloužit mnoho připojených klientů naráz. Pro tuto vlastnost a vysokou výkonnost je dnes Node.js velmi oblíbený pro tvorbu tzv. API serverů pro klientské single page aplikace rovněž v JavaScriptu. Proč je Node.js tak výkonný si ještě vysvětlíme u popisu jeho architektury.

Potřebné nástroje pro vývoj v Node.js

Na začátek, než se vůbec pustíme do instalace, nás určitě bude zajímat, co vše potřebujeme pro práci v Node.js.

Znalosti

Jelikož budeme tvořit webovou aplikaci, měli by jste mít představu o tom, jak takové aplikace fungují a rozumět HTTP protokolu. Dále jste určitě již postřehli, že jako programovací jazyk budeme používat JavaScript. A tím je myšlen převážně čistý JavaScript plus nějaké ty Node.js knihovny, takže např. jQuery určitě nevyužijeme. Navíc, jelikož budeme mít aktuální verzi Node.js na našem serveru, můžeme s klidným svědomím používat i nejnovější vychytávky z ES6, "nové" verze JavaScriptu.

Nástroje

Kromě nainstalovaného Node.js bych doporučil používat nějaké rozumné IDE. To vám obecně při psaní v JS usnadní práci. Já osobně používám WebStorm, ale mám dobré zkušenosti např. i se známými NetBeans.

Instalace

Nyní když máme vše potřebné, pojďme si společně Node.js nainstalovat. Je to velice jednoduché. Přejdeme na oficiální stránky Node.js, případně do sekce download (viz. obrázek), a stáhneme si instalátor pro náš operační systém. Ten následně spustíme a podle instrukcí nainstalujeme. Určitě už jste takových instalací dělali nespočet :)

Stažení instalátoru Node.js

Zatím co instalujete, pojďme si udělat menší úvod do architektury této technologie.

Architektura

Jádro celého Node.js tvoří tzv. smyčka událostí (event loop). Do ní vstupují všechny uživatelské požadavky jako události, které jsou poté přiděleny jednotlivým nezávislým vláknům. Zde určitě platí, že jeden obrázek vydá za tisíc slov:

Node.js smyčka událostí

Další operace, jako manipulace se zdroji operačního systému, což jsou např. čtení souboru nebo práce s databází, jsou poté řešeny také pomocí událostí (tzv. neblokující I/O). Jejich volání je logicky opět zařazeno do smyčky událostí. Ve výsledku to znamená, že vlastně úplně vše řídí tato smyčka pomocí různých událostí. Jednoduché, avšak velice efektivní řešení, obzvláště pro webové aplikace s velkým množstvím uživatelských požadavků. JavaScript pak do toho všeho velice hezky zapadá, jelikož tyto události jsou nativně reprezentovány pomocí JS callbacků :)

Balíčkový systém npm

Společně s Node.js jde ruku v ruce i balíčkovací ekosystém npm. Je přímo součástí standardní instalace Node.js, takže i vy ho nyní již máte k dispozici. Ovládá se pomocí příkazové řádky nebo v rámci IDE.

Není žádnou novinkou, že většina programovacích jazyků má svého správce knihoven a ve světě JavaScriptu je to právě npm. Pomocí něho můžete obecně instalovat i spravovat závislosti ve svých projektech, ale také sdílet a distribuovat svůj JS kód. Nyní se nebavíme jen o knihovnách pro Node.js. Npm se chlubí tím, že je jedním z největších balíčkových správců vůbec a aktuálně obsahuje něco okolo 650 000 balíčků. Najdete zde balíčky nástrojů jako Grunt, Bower, či Gulp nebo také populárních frameworků jako jQuery, React, či AngularJS.

My ho určitě využijeme i v rámci našeho projektu, až si budeme chtít nainstalovat potřebné knihovny, např. pro práci s databází. Důležité je zmínit, že Node.js má i několik vestavěných modulů, primárně zaměřených na vývoj webových aplikací. Jejich seznam najdete v Node.js API. Jelikož je toto kurz Node.js, budu se snažit primárně využívat tyto vestavěné moduly, než abych instaloval nějaké externí.

http modul

Node.js neběží v rámci žádného webového serveru, nýbrž si v rámci skriptu webový server spouštíme sami přímo z kódu. K tomuto účelu slouží vestavěný modul http, který nám následně poskytne plnou kontrolu nad HTTP komunikací tohoto serveru. Je důležité si uvědomit, že tento modul neposkytuje žádnou automatizaci a veškeré náležitosti HTTP protokolu, jako např. hlavičky, si tedy musíme pohlídat sami. Nejlepší bude ukázat si jednoduchý příklad.

První aplikace

Pojďme si nyní zkusit napsat jednoduchou webovou aplikaci v Node.js. Protože s ní budeme potřebovat nějak komunikovat, použijeme právě http modul. A co je vhodnější než osvědčené "Hello World"? :) Vytvoříme si tedy nový projekt a v něm soubor index.js s následujícím obsahem:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((request, response) => {
        response.statusCode = 200;
        response.setHeader('Content-Type', 'text/plain');
        response.end('Hello World!');
});

server.listen(port, hostname, () => {
        console.log(`Server running at http://${hostname}:${port}/`);
});

Nejdříve si načteme http modul. Pomocí něj si vytvoříme server s callbackem, který bude volán pro zpracování jednotlivých klientských požadavků v rámci již zmíněné smyčky událostí. V tomto callbacku poté na základě požadavků odesíláme klientům příslušnou odpověď (response) s náležitostmi HTTP protokolu. Z kódu jste asi vyčetli, že jim odešleme právě text "Hello World". Nakonec náš server nastartujeme na příslušné adrese a portu, přičemž po tomto nastartování následuje callback s vypsáním informativní zprávy, abychom poznali, že server již běží.

Spuštění

Nyní musíme náš skript spustit v prostředí Node.js. To uděláme buď v rámci IDE nebo pomocí jednoduchého příkazu z příkazového řádku, kde uvidíme i výstup. Pokud voláte příkaz z příkazového řádku, musíte se nacházet ve stejné složce jako je index.js nebo zadat úplnou cestu k němu:

node index.js
Server running at http://127.0.0.1:3000/

Nyní již náš server běží. Když si otevřeme webový prohlížeč a přejdeme na jeho adresu, čímž mu vyšleme požadavek, získáme danou odpověď:

První aplikace v Node.js

To je z dnešního úvodního tutoriálu vše, příště, v lekci , se již podíváme na tvorbu zajímavější webové aplikace.


 

 

Článek pro vás napsal Jindřich Máca
Avatar
Jak se ti líbí článek?
14 hlasů
Autor se věnuje převážně webovým technologiím, ale má velkou zálibu ve všem vědeckém, nejen ze světa IT. :-)
Miniatura
Všechny články v sekci
Node.js
Aktivity (3)

 

 

Komentáře

Avatar
Tomas
Člen
Avatar
Tomas:25. dubna 15:10

Zdravím, plánuje se někdy pokračování? Díky

 
Odpovědět 25. dubna 15:10
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Tomas
David Čápka:25. dubna 16:56

Ne, vyšlo to jen proto aby to už nikdy nepokračovalo :D

Odpovědět  +1 25. dubna 16:56
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Tomas
Člen
Avatar
Odpovídá na David Čápka
Tomas:25. dubna 17:01

Dobře víš, jak to bylo myšleno :-D

 
Odpovědět  +1 25. dubna 17:01
Avatar
SniCel
Člen
Avatar
SniCel:5. května 11:11

Tvl, konečne neco zajimaveho a modernejsiho na tehle mrtve a zastarale siti :)

 
Odpovědět  +1 5. května 11:11
Avatar
Erik Šťastný:13. června 16:04

Další! Další! Další! prosím :-`

Editováno 13. června 16:05
 
Odpovědět 13. června 16:04
Avatar
Petr Novák
Člen
Avatar
Petr Novák:19. července 13:53

Byly by fajn další díly. Snad to nebude mrtvé a další články přibudou brzy.

 
Odpovědět 19. července 13:53
Avatar
Daniel Šup
Člen
Avatar
Daniel Šup:19. července 19:17

Zdravím,
z článku je patrné, že Node.js se pro některé operace využívá místo PHP z důvodu jeho vysoké škálovatelnosti. Zajímalo by mě, kdy je vhodné kombinovat Node.js a PHP. Rád bych věděl nějaké příklady webových aplikací, kde se využívá PHP pro některé účely a pro jiné účely se využívá Node.js. Kdy je vhodné využít Node.js pro některé účely a PHP pro jiné další účely?
Jinak se těším na další díly. :)

Editováno 19. července 19:18
 
Odpovědět 19. července 19:17
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Jindřich Máca:20. července 10:49

Seriál není mrtvý, mám v plánu ho do konce léta dopsat. Teď jsem měl zkrátka jinou práci, ale díky Vašemu zájmu už je to na programu. :)

Co se týče použití Node.js a PHP dohromady, tak já jsem viděl např. kombinaci, kdy PHP servírovalo vždy prvotní statickou stránku, která se pak pomocí JavaScriptu napojila na API napsané již v Node.js a začala fungovat defakto jako single page aplikace. Také část JS kódu pak mohla být sdílená mezi tím API a klientskou částí. Jedním dechem ale dodávám, že se jednalo o už dost složitou webovou aplikaci. Obecně bych řekl, že stačí, když si člověk vybere jedno, nebo druhé a to použije. Proč si zbytečně komplikovat život? :-`

Jinak, co se týče té vysoké škálovatelnosti, tak sice ta myšlenka pochází z Node.js, ale jiné jazyky např. PHP, Java apod. si podobný mechanismus také již adaptují nebo se o to alespoň pokouší. Např. pro PHP existuje projekt ReactPHP. Jenom podotýkám, že to vyžaduje trochu jinou konfiguraci webového serveru (Apache, nginx, apod.) a trochu jiný způsob přemýšlení než u běžných PHP aplikací. Na oplátku je to pak prý podle benchmarků skoro stejně výkonné a škálovatelné jako Node.js. ;)

 
Odpovědět  +2 20. července 10:49
Avatar
Petr Novák
Člen
Avatar
Odpovídá na Jindřich Máca
Petr Novák:31. srpna 7:24

Ahoj. Je konec léta :-) ne opravdu, budu nejen já rád,když přibudou nové díly.Kdy bychom se mohli dočkat?

 
Odpovědět 31. srpna 7:24
Avatar
Daniel Šup
Člen
Avatar
Odpovídá na Jindřich Máca
Daniel Šup:10. září 12:49

Ahoj,
díky za odpověď. Omlouvám se, že reaguji takhle pozdě. Tvoji reakce jsem si předtím nevšiml. Míchání Node.js a PHP dohromady je sice komplikované, ale u některých větších webových aplikací by šlo využít. Ty jsi viděl kombinaci, kdy PHP servírovalo prvotní statickou stránku, která se pomocí JavaScriptu napojila na API napsané již v Node.js a začala fungovat defakto jako single page aplikace. Také uvádíš, že šlo o složitou webovou aplikaci (mnohem složitější a rozsáhlejší než aplikace, které vytváříme ve škole). O jakou webovou aplikaci se jednalo? Víš, komu a k čemu měla webová aplikace sloužit? Rád bych získal představu, kde lze míchat Node.js a PHP.
Co se týče projektu ReactPHP, tak se na to ještě kouknu. ReactPHP je trochu blíže Node.js. O tomhle bys také mohl napsat nějaký seriál s příklady, aby všichni viděli, jaký způsob přemýšlení to vyžaduje. Mohu v dokumentaci najít, jakou konfiguraci to vyžaduje? Do dokumentace jsem zatím nahlédl pouze matně.

Editováno 10. září 12:49
 
Odpovědět 10. září 12:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.