Używanie natywnych modułów Node.js na przykładzie Path i Util

W tym artykule, który jest częścią kursu Node.js dalej kontynuujemy „podróż” po funkcjach i obiektach dostępnych w Node.js z poziomu globalnego.

A konkretnie zajmiemy się funkcją require().

Korzystaliśmy już z funkcji require() w poprzednim artykule z tego kursu do załadowania modułu Path i przypisania go do zmiennej o tej samej nazwie:

var path = require("path");

Funkcja require() służy do ładowania/importowania modułów Node.js. Moduł path jest dostępny w Node.js po jego zainstalowaniu na Twoim komputerze/serwerze (są to tak zwane moduły 'core’). Znacznie większa kolekcja modułów znajduje się jednak na zdalnym repozytorium NPM. Aby z nich korzystać, trzeba je najpierw zainstalować, co zademonstruję w dalszej części kursu. Na razie omówimy sobie moduły, których użycie w aplikacji nie wymaga instalacji przez NPM.

Modułu path używa się do operacji związanych ze ścieżkami plików w aplikacji. Na przykład wcześniej użyliśmy jej do wyciągnięcia nazwy aktualnego pliku:

var path = require("path");
console.log(path.basename(__filename));

basename() to metoda w module path, która w połączeniu z parametrem __filename wyrzuca nazwę pliku (z którego została wywołana). Natomiast jeśli chcemy uzyskać nazwę aktualnego katalogu, możemy użyć parametru __dirname.

var path = require("path");
console.log(path.basename(__dirname));

Za pomocą modułu path, a konkretnie metody join(), możemy łatwo konfigurować swoje własne ścieżki i katalogi. Na przykład załóżmy, że chcemy utworzyć w naszej aplikacji katalog 'uploads’ na pliki wgrywane przez użytkowników, a w nim utworzyć podkatalog 'images’ na zdjęcia. Na koniec chcemy otrzymać pełną ścieżkę dostępu do tego katalogu. Dzięki metodzie join() modułu path jest to banalne:

var path = require("path");
console.log(path.join(__dirname, 'uploads','images'));

Czyli do aktualnego katalogu dodajemy dwa foldery, funkcja console.log() wyświetla całą ścieżkę na ekranie.

tutorial-node-js-moduly

Innym interesującym modułem dostępnym natywnie w Node.js jest moduł util. Zaimportujmy go sobie do zmiennej util:

var util = require("util");

Aha, nie musimy trzymać importowanych modułów w zmiennych var, mogą to być również stale const, jeśli mamy pewność, że nie będziemy ich zmieniać. A w przypadku importowania modułów w Node.js, najczęściej tak właśnie jest.

Więc dla odmiany, zainicjujmy ten moduł do stałej util:

const util = require("util");

Moduł ten posiada sporo funkcji-helperów ułatwiających proces tworzenia aplikacji, a szczególnie własnych modułów. Ich pełna lista znajduje się oczywiście w dokumentacji Node.js.

Jedną z interesujących metod jest log(). Możemy jej użyć zamiast javascriptowej standardowej console.log(). Różnica jest taka, że oprócz logowania informacji na ekran, util.log() dodaje również timestamp, kiedy zostało to wykonane. Zastąpmy console.log() w naszym poprzednim skrycie metodą util.log():

var path = require("path");
const util = require("util");
util.log(path.join(__dirname, 'uploads','images'));

Po uruchomieniu mamy taki wynik:

tutorial-node-js-dodawanie-modulow

Widzimy, że oprócz ścieżki dostępu mamy czas wykonania 31 lipca o 09:56.

Jako, że Node.js jest 'zasilany’ preprocesorem v8 z przeglądarki Google Chrome, możemy użyć tego modułu i jego metod do np. sprawdzenia aktualnego zużycia pamięci serwera. Taką metodą jest getHeapStatistics(). Zobaczmy jak działa, dodając ją do naszego poprzedniego skryptu:

var path = require("path");
const util = require("util");
const v8 = require("v8"); // importujemy moduł v8 do stałej v8
util.log(path.join(__dirname, 'uploads','images'));
util.log(v8.getHeapStatistics()); // wyświetlamy informacje o aktualnym zużyciu pamięci

Uruchamiamy i widzimy dodatkowy log – obiekt zawierający różne parametry dotyczące aktualnych zasobów serwera:

tutorial-node-js-modul-v8