Node.JS 3: Moduly

V minulé epizodě jsme si ukázali, jak založit funkční Node.JS projekt. Dneska si ukážeme, jak rozvětvit naši aplikaci podle oblíbeného vývojářského postupu kiss (jedna z verzí výkladu této zkratky je "Keep it short and simple.") pomocí modul.

Moduly (anglicky Modules) se v mnohém podobají knihovnám v JS. Každý soubor je navíc brán jako samostatný modul.

Abychom mohli zařadit moduly do naší aplikace, potřebujeme funkci require(jmenomodulu). Může být použita k importování

  1. vlastních modulů
  2. vestavěných modulů (např.: http)
  3. externích modulů nainstalovaných pomocí npm.

Tvorba vlastního modulu

Můžeme vytvořit vlastní modul a potom jej jinde v našem projektu exportovat. Rozdíl mezi modulem a obyčejným javascriptovým souborem je schopnost vyexportovat z modulu to, co potřebujeme (proměnné, objekty, funkce, vlastnosti (properties) atd.)

Zkusme vytvořit například modul, který pro nás vypočítá objem koule a krychle.

Vytvoříme soubor modulu, já si jej pojmenuji např. mujprvnimodul.js, nadeklarujeme si v něm dvě funkce:

exports.koule = function (r) {
  return 4/3 * Math.PI * Math.pow(r, 3); // funkce Math.pow umocňuje poloměr r na třetí
};

exports.krychle = function (a) {
    return Math.pow(a,3);
 };

Používáme klíčové slovo exports., díky kterému je funkce dostupná i mimo soubor mujprvnimodul.js.

Nyní modul využijeme v hlavním souboru index.js. Vytvoříme si proměnnou objem, jako parametr funkce dosadím např. 4 - to je tedy poloměr koule a hrana krychle. Vypíšeme si vše do konzole pomocí volání console.log:

const objem = require('./mujprvnimodul');
console.log("Objem koule je " + objem.koule(4)
    + " metrů krychlových a objem krychle je "
    + objem.krychle(4) + " metrů krychlových.");

V konzoli se nám zobrazí sdělení:

Objem koule je 268.082573106329 metrů krychlových a objem krychle je 64 metrů krychlových.

Projekt najdete na Githubu ve složce Node.JS - mujprvnimodul.js a index.js.

Vestavěné moduly

Tato skupina modulů obsahuje holé minimum funkčnosti Node.JS. Jsou automaticky zkompilované do binární podoby a není třeba je instalovat v konzoli (cmd). Stačí je uvést, ideálně na počátku aplikace, pomocí:

const jmenoPromenne = require('jmenoModulu');

Některé z vestavěných modulů:

  • assert - poskytuje sadu ověřujících testů
  • buffer - obsahuje funkčnost zpracovávající binární data
  • http - umožní udělat z Node.JS dokumentu HTTP server
  • fs - mainpuluje se soubory
  • events - řídí události
  • url - "rozparsuje" (syntakticky rozebere) string URL