Node.js: Przewodnik po Server-Side JavaScript

Node.js to wieloplatformowe, darmowe środowisko uruchomieniowe o otwartym kodzie, które pozwala na wykonywanie kodu JavaScript po stronie serwera. Stworzone w 2009 roku, zrewolucjonizowało tworzenie aplikacji webowych, umożliwiając programistom używanie jednego języka (JavaScript) zarówno dla frontendu, jak i backendu. U jego podstaw leży potężny silnik V8 (stworzony przez Google dla przeglądarki Chrome) oraz biblioteka libUV, która zarządza asynchronicznymi operacjami wejścia-wyjścia.

Asynchroniczność: serce Node.js

Największą siłą i cechą wyróżniającą Node.js jest jego model oparty na asynchroniczności i nieblokującej obsłudze operacji wejścia/wyjścia (I/O). W tradycyjnych, wielowątkowych serwerach (jak Apache), każde przychodzące połączenie blokuje jeden wątek, który czeka na zakończenie operacji (np. odczytu z bazy danych). Przy dużej liczbie jednoczesnych użytkowników prowadzi to do szybkiego wyczerpania zasobów.

Node.js podchodzi do tego inaczej:

  • Jednowątkowa pętla zdarzeń (Event Loop): Node.js działa na jednym głównym wątku. Gdy operacja wymaga czasu, jest ona delegowana do systemu (do tzw. puli wątków), a pętla zdarzeń może w tym czasie obsługiwać kolejne zadania.
  • Nieblokujące I/O: Po zakończeniu czasochłonnej operacji, jej wynik wraca do pętli w postaci zdarzenia (callback), które jest następnie przetwarzane. Dzięki temu główny wątek nigdy nie jest blokowany, co pozwala na obsługę tysięcy jednoczesnych połączeń przy minimalnym zużyciu pamięci.

Ten model sprawia, że Node.js jest idealnym wyborem do budowy wysoko skalowalnych systemów online, takich jak serwery API, aplikacje czasu rzeczywistego (czaty, gry) czy mikroserwisy.

Ekosystem i narzędzia

Siła Node.js leży nie tylko w jego architekturze, ale również w gigantycznym ekosystemie narzędzi, który go otacza.

NPM (Node Package Manager)

NPM to największe na świecie repozytorium otwartego oprogramowania. Dzięki niemu deweloperzy mają do dyspozycji miliony gotowych do użycia bibliotek (pakietów) i narzędzi, co drastycznie przyspiesza pracę przy tworzeniu systemów dedykowanych. Za pomocą prostej komendy `npm install` można dodać do projektu dowolną funkcjonalność, od frameworków webowych po narzędzia do pracy z datami czy grafiką.

Frameworki Webowe

Chociaż Node.js dostarcza wbudowany moduł `http` do tworzenia serwerów, w praktyce nikt nie używa go bezpośrednio. Standardem jest korzystanie z frameworków, które upraszczają ten proces. Najpopularniejsze z nich to:

Framework Charakterystyka
Express.js Minimalistyczny i elastyczny, od lat de facto standard w świecie Node.js.
NestJS Nowoczesny, w pełni oparty na TypeScript, dostarcza uporządkowaną architekturę inspirowaną Angularem.
Fastify Skupiony na maksymalnej wydajności, często szybszy od Expressa.

Przykład prostego serwera w Express.js


// 1. Zaimportuj bibliotekę Express
const express = require('express');

// 2. Stwórz instancję aplikacji
const app = express();
const port = 3000;

// 3. Zdefiniuj endpoint, który odpowie na żądanie GET
app.get('/', (req, res) => {
  res.send('Hello World!');
});

// 4. Uruchom serwer i nasłuchuj na porcie 3000
app.listen(port, () => {
  console.log(`Aplikacja nasłuchuje na porcie ${port}`);
});
                

Podsumowanie

Podsumowując, Node.js to potężne i dojrzałe środowisko, które zrewolucjonizowało świat backendu. Jego model oparty na asynchroniczności i gigantyczny ekosystem NPM sprawiają, że jest to doskonały wybór do budowy szybkich i skalowalnych aplikacji webowych, API oraz mikroserwisów. Siłę Node.js potwierdza fakt, że jest on używany przez największe firmy technologiczne na świecie, takie jak Netflix, Uber czy LinkedIn.

Przydatne linki