Node.js dla frontendu — pierwszy serwer w 30 minut
Praktyczny start z Node.js dla frontendowców. npm, package.json, Express, middleware i obsługa błędów bez uproszczeń, które później bolą w prawdziwym API.
Jako frontend developer prawdopodobnie używasz Node.js codziennie — npm, webpack, vite, wszystkie te narzędzia działają na Node. Ale czy wiesz, jak napisać własny serwer?
Znajomość podstaw Node.js to wymaganie na większości stanowisk frontend. Nie musisz być ekspertem od backendu, ale powinieneś rozumieć jak działa HTTP i potrafić postawić prosty API, czyli Application Programming Interface, definiuje sposób komunikacji między aplikacjami lub modułami. endpoint.
W tym artykule zbudujemy działający serwer Express od zera. Praktycznie, bez zbędnej teorii.
Krótka odpowiedź: Node.js pozwala uruchamiać JavaScript po stronie serwera, a Express.js to najpopularniejszy framework do budowania API. Wystarczy kilkanaście linijek kodu, żeby postawić działający serwer REST z obsługą routingu, middleware i błędów. To umiejętność wymagana na większości stanowisk frontend i dobry punkt wejścia w fullstack development.
Czym jest Node.js?
Node.js to środowisko uruchomieniowe JavaScript poza przeglądarką. Pozwala uruchamiać JS na serwerze, w terminalu, wszędzie.
Non-blocking I/O — świetny do operacji sieciowych, plików i baz danych
npm — największy ekosystem pakietów na świecie
To ważne rozróżnienie: Node błyszczy przy I/O, ale ciężkie obliczenia CPU-bound zwykle wynosi się do workerów, osobnych usług albo innego runtime'u.
Instalacja Node.js
Sprawdź czy masz Node.js
Code
node --version # np. v20.11.0npm --version # np. 10.2.4
Instalacja
Opcja 1: Oficjalna strona
Pobierz LTS z nodejs.org
Opcja 2: nvm (zalecane)
Node Version Manager pozwala mieć wiele wersji:
Code
# Instalacja Node.js przez nvm po skonfigurowaniu narzędzianvm install --ltsnvm use --lts
Szczegóły instalacji samego nvm najlepiej brać z jego aktualnej dokumentacji, bo sposób bootstrapu bywa różny między systemami.
Pierwszy skrypt Node.js
Utwórz plik hello.js:
Code
console.log('Hello from Node.js!')// Dostęp do informacji o środowiskuconsole.log('Node version:', process.version)console.log('Platform:', process.platform)console.log('Current directory:', process.cwd())
Uruchom:
Code
node hello.js
Proste! Możesz uruchamiać dowolny JavaScript.
W przykładach niżej używam składni CommonJS (require), bo jest krótka i nadal bardzo częsta w prostych projektach Node. W nowych aplikacjach równie dobrze możesz spotkać ESM (import).
Middleware to funkcje, które mają dostęp do req, res i next. Wykonują się w kolejności definiowania.
Struktura middleware
Code
function myMiddleware(req, res, next) { // Zrób coś z req/res console.log(`${req.method} ${req.url}`) // Przekaż do następnego middleware next()}app.use(myMiddleware)
Praktyczne przykłady
Code
// Logger — loguj każde żądanieapp.use((req, res, next) => { console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`) next()})// Weryfikacja API keyfunction requireApiKey(req, res, next) { const apiKey = req.headers['x-api-key'] if (apiKey !== process.env.API_KEY) { return res.status(401).json({ error: 'Invalid API key' }) } next()}// Użyj dla konkretnych routesapp.get('/api/protected', requireApiKey, (req, res) => { res.json({ secret: 'data' })})// Lub dla wszystkich /api/*app.use('/api', requireApiKey)
const cors = require('cors')const helmet = require('helmet')const morgan = require('morgan')// CORS — Cross-Origin Resource Sharingapp.use(cors()) // wygodne na start, ale w produkcji zwykle zawężasz originy// Helmet — nagłówki bezpieczeństwaapp.use(helmet())// Morgan — lepszy loggerapp.use(morgan('dev'))
W Express 4 błędy z asynchronicznych handlerów trzeba zwykle przekazać do next(error) samemu. W nowszych setupach bywa to opakowane helperem albo obsługiwane przez warstwę frameworka.
404 handler
Code
// Na końcu, przed error handleremapp.use((req, res) => { res.status(404).json({ error: 'Not found' })})
Kompletny przykład — REST API
To tylko demonstracja. Po restarcie procesu dane znikną, więc w realnej aplikacji w tym miejscu wchodzi baza danych.
# GET all userscurl http://localhost:3000/api/users# GET single usercurl http://localhost:3000/api/users/1# POST create usercurl -X POST http://localhost:3000/api/users \ -H "Content-Type: application/json" \ -d '{"name":"Piotr","email":"piotr@example.com"}'# PUT update usercurl -X PUT http://localhost:3000/api/users/1 \ -H "Content-Type: application/json" \ -d '{"name":"Jan Updated","email":"jan.new@example.com"}'# DELETE usercurl -X DELETE http://localhost:3000/api/users/2
Zmienne środowiskowe
Nie hardcoduj wrażliwych danych!
Code
npm install dotenv
Code
// Na początku index.jsrequire('dotenv').config()const PORT = process.env.PORT || 3000const API_KEY = process.env.API_KEY
Code
# .env (dodaj do .gitignore!)PORT=3000API_KEY=super-secret-keyDATABASE_URL=mongodb://localhost/mydb
FAQ
Czym różni się Node.js od przeglądarki?
Node.js to środowisko uruchomieniowe JavaScript działające poza przeglądarką — na serwerze, w terminalu, w skryptach automatyzacji. Nie ma dostępu do DOM ani API przeglądarki (np. window, document), ale za to posiada własne moduły do obsługi plików, sieci i systemu operacyjnego.
Czy muszę znać Node.js jako frontend developer?
Tak, znajomość podstaw Node.js jest wymagana na większości stanowisk frontend. Wszystkie popularne narzędzia (Vite, webpack, npm, Next.js) działają na Node. Umiejętność postawienia prostego API i rozumienie, jak działa serwer HTTP, to kompetencje, które odróżniają seniora od juniora.
Co to jest Express.js i do czego służy?
Express.js to minimalistyczny framework webowy dla Node.js, który upraszcza tworzenie serwerów HTTP. Zapewnia routing (mapowanie URL na handlery), middleware (funkcje przetwarzające requesty) i wygodną obsługę błędów. Jest to de facto standard dla prostych API w ekosystemie Node.
Czym jest middleware w Express?
Middleware to funkcja przyjmująca req, res i next, która wykonuje się przed docelowym handlerem route'u. Middlewares używa się do logowania, autoryzacji, parsowania body, obsługi CORS i innych zadań przekrojowych. Są uruchamiane w kolejności, w jakiej zostały zarejestrowane.
Jak obsługiwać błędy w Express.js?
Błędy synchroniczne Express łapie automatycznie, ale dla asynchronicznych handlerów trzeba przekazać błąd do next(error). Na końcu aplikacji rejestruje się globalny error handler z czterema parametrami (err, req, res, next), który zwraca odpowiednią odpowiedź HTTP.
Czym jest package.json i jak zarządzać zależnościami?
package.json to plik konfiguracyjny projektu Node.js — przechowuje metadane, listę zależności (dependencies, devDependencies) i skrypty uruchomieniowe. Zależności instaluje się poleceniem npm install <nazwa>, a wersje są blokowane w package-lock.json dla reprodukowalności środowiska.
Jak przechowywać wrażliwe dane jak klucze API w Node.js?
Nigdy nie wpisuj wrażliwych danych na stałe w kodzie. Używaj zmiennych środowiskowych: utwórz plik .env (dodaj do .gitignore!), zainstaluj pakiet dotenv i wczytaj go na początku aplikacji przez require('dotenv').config(). Dostęp do wartości uzyskujesz przez process.env.NAZWA_ZMIENNEJ.
Podsumowanie
Pojęcie
Opis
Node.js
JS poza przeglądarką
npm
Menedżer pakietów
package.json
Konfiguracja projektu
Express
Framework web dla Node.js
Middleware
Funkcje przetwarzające req/res
Router
Mapowanie URL → handler
Co dalej?
Podłącz prawdziwą bazę danych (MongoDB, PostgreSQL)
Dodaj autentykację (JWT, czyli JSON Web Token, to podpisany token używany często do autoryzacji i przekazywania tożsamości użytkownika., Passport.js)
Walidacja danych (Joi, Zod)
Testy (Jest, Supertest)
Masz teraz działające API REST w ~100 liniach kodu. To fundament, na którym budujesz większe aplikacje. Poznaj też zasady projektowania REST API, żeby Twoje endpointy były profesjonalne.
Jeśli chcesz przełożyć ten temat na lepszą architekturę frontendu, uporządkować React lub Next.js i podnieść jakość pracy zespołu, skontaktuj się ze mną. Pomagam zamieniać wiedzę z artykułów w praktyczne decyzje technologiczne.
Maciej Sala — project manager i frontendowiec z doświadczeniem w marketingu internetowym. Na co dzień pracuję z Reactem, Next.js i TypeScriptem, łącząc perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat związany z branżą gier wideo jako project manager i game designer.
Absolwent historii na Uniwersytecie Jagiellońskim i studiów podyplomowych z marketingu internetowego na Akademii Górniczo-Hutniczej w Krakowie. Poza pracą trenuje na siłowni, maluje figurki i realizuje własne projekty.
Astro.js vs Next.js — które narzędzie wybrać w 2026 roku?
Fachowe porównanie Astro.js i Next.js z perspektywy developera pracującego na co dzień w Next.js. Architektura, wydajność, SEO, DX, koszty i konkretne use case — z benchmarkami i przykładami kodu.
WordPress → Next.js — migracja treści, redirecty 301 i zachowanie pozycji SEO
Jak przenieść stronę z WordPress na Next.js bez utraty pozycji w Google? Eksport treści, mapowanie URL, redirecty 301, migracja obrazów i weryfikacja indeksacji.
Google Search Console + Next.js — indeksacja, błędy, performance i co z nimi robić
Jak korzystać z Google Search Console dla strony Next.js? Weryfikacja, sitemap, indeksacja, Core Web Vitals, crawl budget i najczęstsze problemy — praktyczny poradnik.