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.
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:
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:
Małe proste tutoriale są najlepsze. Czasem, gdy szukam czegoś w sieci to często napotkane utrudnienia są wyjaśnianie na podst. rozwiązań, które nie zawsze są „cool” bo nie mam bladego pojęcia z czego to wynika. Przyszła mi myśl…. chcesz programować, względnie szybko się uczyć …. stosuj kaizen 🙂