Node.js je návykové, začněte s ním hned

JavaScript už nějakou dobu není jen sprosté slovo. V prohlížeči pomalu není jiné volby a na serveru už není jen doménou technologických špiček a nadšenců, ale je vážným soupeřem tradičních prostředí jako je Java, PHP, Ruby a dalších. Možná je na čase se posunout dále a zkusit něco nového.

Node.js ale není nic nového

Node.js vznikl už v roce 2009. Díky jeho jednoduchosti se stal velmi rychle populárním, v roce 2013 jej začal nabízet Amazon v rámci svého AWS a již tehdy byl Node.js totálně "production ready".

Ve stejné době jsme jej nasadili ve Storyous jako soketový server. Díky jeho jednoduchosti se nám implementace vešla do čtyř set řádků, a záhy se nám prostředí Node.js osvědčilo jako naprosto spolehlivé.

Nejjednodušší Development Stack vůbec

Jediné, co je potřeba, je stáhnout a nainstalovat Node.js server přímo z nodejs.org. Pokud máte Linux, můžete rovnou instalovat pomocí balíčkovačů AptGet, nebo Yum. Součástí Node.js je rovnou balíčkovací nástroj NPM i základní knihovna obsahující vše potřebné pro šifrování, práci s filesystémem, síťovou komunikaci i vícevláknové aplikace.

Díky jednoduchosti Node.js je zaškolení nového vývojáře extrémně rychlé. Rozeběhnout komukoliv na počítači vyvíjenou aplikaci vyžaduje jen instalaci Node.js a naklonování repozitáře. Odpadly nám problémy s různými operačními systémy, nastavením prostředí či instalacemi různých speciálních rozšíření.

Bez NPM ani ránu, aneb balíčky a akce

NPM nejen že zajišťuje přístup k rozsáhlému repozitáři balíčků npmjs.com a umožňuje balíčky instalovat i aktualizovat, ale dokáže také spouštět různé automatizace, jako třeba testy, nebo rovnou celou aplikaci.

Nejjednodušší cesta, jak začít, je zadat do příkazového řádku příkaz npm init a vyplnit v příkazové řádce základní informace o projektu.

    # create project directory
    mkdir my-project
    cd my-project

    # initialize NPM
    npm init

Na konci procesu vznikne v souboru package.json konfigurace pro NPM. V budoucnu ponese seznam všech balíčků potřebných jak pro vývoj, tak pro produkční nasazení. Pro elegantní spouštění aplikace pomocí příkazu npm start je třeba do souboru package.json pod sekci script přidat následující řádek:

{
    "scripts": {
         "start": "node --use-strict index.js"
     }
}

Ten zajistí, že příkaz npm start přímo spustí vaši aplikaci, jejíž zaváděcí kód leží v souboru index.js v kořenovém adresáři projektu. Ten ale musíme vytvořit. Doporučuji pouštět Node.js aplikace ve striktním módu, který vás rychle upozorní na běžné prohřešky v kódu. Které to jsou, se dočtete například zde, na webu Microsoftu.

Ahoj světe

V Node.js je k dispozici http modul, se kterým během několika okamžiků vytvoříte funkční webserver. Pomocí funkce require() stačí načíst potřebný modul, vytvořit instanci webserveru a na ni naslouchat na událost request, která je zavolána vždy, když na server přijde požadavek, a nakonec webserver zapnout metodou listen(). Celý následující kód pak přijde uložit do kořenového adresáře projektu jako index.js, který je nastaven v souboru package.json jako zaváděcí skript.

/**
 * index.js
 */

const http = require('http');

// create an instance of a nodejs http server
const server = http.createServer();

var requestCount = 0;

// listen for request event
server.on('request', (req, res) => {

    requestCount++;

    // write response and finnish it
    res.write(`Hello world! (for ${requestCount} times)`);
    res.end();
});

// start a webserver on port 8080
server.listen(8080);  

Pro spuštění celé aplikace zadáte příkaz npm start a po zadání adresy http://localhost:8080 uvidíte v prohlížeči textovou odpověď serveru s aktuálním počtem dotazů od jeho spuštění.

API HTTP modulu, který jsme použili k realizaci serveru, skvěle ilustruje charakter celého Node.js ekosystému. V základním balení dostanete plně funkční nástroj, který si ale nedělá ambice uspokojit potřeby všech a dává jasně prostor dalším modulům, které se ale drží stejné logiky. Dělat jen jednu věc a dělat jí pořádně. Pokud tomu tak není, instalaci takového modulu se vyhněte, neboť byste si nainstalovali problém.

Pro běžné webové aplikace se nejčastěji používá Express.js. V příkladu se můžete podívat, jak vytvořit jednoduchou Express.js aplikaci.

Javascript se mění, zaspat se nevyplatí

Pokud se divíte podivné konstrukci se závorkami a šipkou, nebo klíčovému slovu const, vězte že jde o standarní konstrukce EcmaScriptu 6, které jsou podporovány od Node.js verze 4.0. Plynou z nich následující výhody:

  • Arrow funkce, neboli konstrukce () => {} jsou zkratkou klasických anonymních funkcí mající jednu velmi užitečnou vlastnost: Umí udržet kontext this a není třeba otravné proměnné var self = this;
  • Konstanty const se chovají skoro jako proměnné var s dvěma rozdíly: není možné k nim přistupovat dříve než je deklarujete (jako to jde u funkcí) a nelze změnit jejich přímý obsah. Pokud do konstanty vložíte objekt, nikdy ho nevyměníte za jiný, ale můžete měnit jeho atributy.

Velmi dobře a pochopitelně jsou ES6 funkce popsané na webu es6-features.org a pokud by vás zajímalo, které jsou zrovna podporované v Node.js, podívejte se na oficiální ECMAScript 2015 (ES6) in Node.js dokumentaci.

Existují samozřejmě nástroje, které vám umožní používat skoro všechny ES6+ konstrukce, ale je dobré vždy zvážit, zda se kvůli několika málo vylepšením vyplatí nasazovat nástroj na překlad zdrojového kódu. Jiná situace je na serveru, jiná u klientského kódu, který se překládá i z dalších důvodů. Vždy platí, že čím jednodušší dev-stack, tím lépe.

David Menger

Read more posts by this author.