Node.js
Node.js — це вільне, open source і cross-platform середовище виконання JavaScript поза браузером. Воно дозволяє використовувати JavaScript для серверів, API, web-застосунків, command line tools, scripts, real-time сервісів, backend-логіки, automation і DevOps-задач.
Node.js працює на базі V8 JavaScript engine — рушія, який виконує JavaScript у Google Chrome і Node.js. Завдяки цьому JavaScript став не лише мовою браузера, а й мовою серверної розробки.
Основна ідея: Node.js дозволяє писати backend, API, CLI й серверні скрипти тією ж мовою JavaScript, яку використовують у frontend-розробці.
Цікавий факт
До Node.js JavaScript здебільшого сприймали як мову для браузера: кнопки, форми, анімації, взаємодія зі сторінкою. Node.js змінив цю роль і показав, що JavaScript може працювати на сервері, читати файли, відкривати мережеві з’єднання, обробляти HTTP-запити, запускати CLI-інструменти й керувати build-процесами.
Саме тому сучасний JavaScript-світ виглядає так цілісно: одна команда може писати frontend на React або Vue, backend на Node.js, build tools на JavaScript і scripts для автоматизації теж на JavaScript.
Найлюдяніший факт: Node.js зробив JavaScript мовою “від кнопки в браузері до сервера в хмарі”.
Загальний опис
Офіційний сайт Node.js описує його як free, open-source, cross-platform JavaScript runtime environment, який дозволяє створювати servers, web apps, command line tools і scripts. :contentReference[oaicite:1]{index=1}
Node.js використовується для:
- REST API;
- GraphQL API;
- web servers;
- real-time apps;
- WebSocket-сервісів;
- chat applications;
- CLI tools;
- build tools;
- automation scripts;
- backend for frontend;
- server-side rendering;
- microservices;
- serverless functions;
- bots;
- streaming services;
- file processing;
- development tooling;
- DevOps scripts;
- Dockerized applications.
Перевага: Node.js особливо зручний там, де команда вже добре знає JavaScript і хоче використовувати одну мову для frontend, backend і tooling.
Node.js 24 LTS і Node.js 26 Current
На офіційній сторінці завантаження Node.js актуально вказано v24.15.0 як Latest LTS і v26.1.0 як Latest Release. LTS-версії зазвичай обирають для production, а Current-версії — для тестування нових можливостей і раннього ознайомлення. :contentReference[oaicite:2]{index=2}
| Гілка | Типовий сценарій |
|---|---|
| Node.js 24 LTS | Production, стабільні застосунки, довша підтримка |
| Node.js 26 Current | Тестування нових можливостей, експерименти, підготовка до майбутнього LTS |
Практична порада: для більшості production-проєктів краще брати LTS-гілку Node.js, а не найновіший Current-реліз.
V8 JavaScript Engine
V8 — це JavaScript engine, який виконує JavaScript-код. Офіційна документація Node.js пояснює, що V8 — рушій JavaScript, який powers Google Chrome, а також використовується в Node.js. :contentReference[oaicite:3]{index=3}
V8 відповідає за:
- parsing JavaScript;
- execution JavaScript code;
- JIT compilation;
- memory management;
- garbage collection;
- ECMAScript features;
- WebAssembly у відповідних сценаріях;
- runtime performance.
Проста аналогія: JavaScript — це текст п’єси, V8 — актор і режисер виконання, а Node.js — сцена з доступом до файлів, мережі й системних можливостей.
Node.js і браузерний JavaScript
Node.js і браузер виконують JavaScript, але дають різні API.
| Середовище | Що доступно |
|---|---|
| Browser | DOM, window, document, Web APIs, rendering page |
| Node.js | filesystem, network, process, streams, child processes, server APIs |
У браузері JavaScript керує сторінкою. У Node.js JavaScript може:
- читати й писати файли;
- запускати HTTP-сервер;
- працювати з TCP;
- виконувати scripts;
- працювати з OS process;
- запускати CLI;
- підключатися до databases;
- створювати backend services.
Важливо: у Node.js немає DOM за замовчуванням. `document.querySelector` — це браузерна історія, а не стандартний Node.js API.
Event loop
Event loop — одна з ключових ідей Node.js. Він дозволяє Node.js обробляти багато I/O-операцій без створення окремого потоку для кожного запиту.
Event loop важливий для:
- asynchronous I/O;
- HTTP servers;
- timers;
- promises;
- callbacks;
- non-blocking operations;
- network requests;
- filesystem operations;
- high concurrency.
Цікавий момент: Node.js може обслуговувати багато одночасних з’єднань не тому, що “має нескінченно потоків”, а тому, що добре працює з неблокуючим I/O.
Asynchronous I/O
Asynchronous I/O означає, що програма не чекає пасивно завершення повільної операції, а може продовжувати роботу й повернутися до результату пізніше.
Приклад:
import { readFile } from 'node:fs/promises';
const content = await readFile('data.txt', 'utf8');
console.log(content);
Async I/O корисний для:
- читання файлів;
- database queries;
- HTTP-запитів;
- network sockets;
- API calls;
- streaming;
- parallel tasks;
- responsive servers.
Практична роль: asynchronous I/O дозволяє серверу не “зависати”, поки база даних або файлова система відповідає.
npm
npm — найвідоміший package manager для Node.js-екосистеми.
npm використовується для:
- встановлення packages;
- керування dependencies;
- запуску scripts;
- публікації packages;
- semantic versioning;
- package-lock;
- development tooling;
- build pipelines.
Приклад:
npm init -y
npm install express
npm run dev
Практична роль: npm — це не просто “магазин бібліотек”, а головний механізм залежностей і scripts у більшості Node.js-проєктів.
npx
npx дозволяє запускати package binaries без постійного глобального встановлення.
Приклад:
npx create-vite my-app
npx eslint .
npx корисний для:
- scaffolding;
- одноразових команд;
- запуску local binaries;
- dev tools;
- швидкого старту проєктів.
Практична роль: npx зручний, коли потрібно швидко запустити інструмент, не засмічуючи систему глобальними пакетами.
package.json
package.json — центральний файл Node.js-проєкту.
Він описує:
- назву пакета;
- версію;
- scripts;
- dependencies;
- devDependencies;
- module type;
- entry point;
- license;
- engines;
- metadata;
- package manager expectations.
Приклад:
{
"name": "example-api",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "node --watch server.js",
"start": "node server.js"
},
"dependencies": {
"express": "^5.0.0"
}
}
Важливо: package.json — це контракт проєкту: як його запускати, які залежності потрібні й яку поведінку очікує команда.
CommonJS і ES Modules
Node.js підтримує дві основні module systems:
- CommonJS — `require`, `module.exports`;
- ES Modules — `import`, `export`.
CommonJS:
const fs = require('node:fs');
module.exports = { name: 'app' };
ES Modules:
import fs from 'node:fs';
export const name = 'app';
Важливо: змішування CommonJS і ES Modules може створювати плутанину. Для нового проєкту краще одразу вибрати стиль і дотримуватися його.
HTTP server
Node.js має вбудований HTTP-модуль.
Приклад простого сервера:
import { createServer } from 'node:http';
const server = createServer((req, res) => {
res.writeHead(200, { 'content-type': 'text/plain; charset=utf-8' });
res.end('Hello from Node.js');
});
server.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
Такий сервер корисний для навчання, але в реальних застосунках часто використовують framework.
Практична роль: Node.js може створити web server без сторонніх бібліотек, але frameworks спрощують routing, middleware й validation.
Express.js
Express.js — один із найпопулярніших web framework для Node.js.
Express використовується для:
- REST API;
- routing;
- middleware;
- web servers;
- authentication flows;
- JSON APIs;
- small services;
- backend prototypes;
- production APIs.
Приклад:
import express from 'express';
const app = express();
app.use(express.json());
app.get('/health', (req, res) => {
res.json({ ok: true });
});
app.listen(3000, () => {
console.log('API running on port 3000');
});
Практична роль: Express став майже “класичною школою” Node.js backend-розробки.
Fastify
Fastify — сучасний Node.js web framework з акцентом на продуктивність, schema-based validation і developer experience.
Fastify корисний для:
- швидких API;
- JSON services;
- schema validation;
- plugins;
- TypeScript-friendly backend;
- structured logging;
- production services.
Перевага: Fastify часто обирають, коли хочеться сучаснішого підходу до API, ніж мінімалістичний Express.
NestJS
NestJS — framework для Node.js, який використовує TypeScript і архітектурні ідеї на кшталт modules, controllers, providers і dependency injection.
NestJS підходить для:
- enterprise Node.js;
- великих backend-сервісів;
- TypeScript-first команд;
- structured architecture;
- REST API;
- GraphQL;
- microservices;
- testing;
- dependency injection.
Важливо: NestJS додає структуру й дисципліну, але для маленького API може бути важчим, ніж потрібно.
TypeScript і Node.js
TypeScript дуже часто використовують із Node.js.
TypeScript дає:
- static typing;
- кращий autocomplete;
- type checking;
- interfaces;
- safer refactoring;
- кращу документацію через types;
- зручність у великих codebases.
Приклад:
type User = {
id: number;
email: string;
};
function formatUser(user: User): string {
return `${user.id}: ${user.email}`;
}
Практична роль: TypeScript особливо корисний у Node.js-проєктах, де код швидко росте й простого JavaScript уже мало для контролю помилок.
Streams
Streams у Node.js дозволяють працювати з даними частинами, а не завантажувати все одразу в пам’ять.
Streams корисні для:
- великих файлів;
- HTTP responses;
- uploads;
- downloads;
- compression;
- logs;
- data pipelines;
- video/audio;
- CSV processing.
Приклад ідеї:
import { createReadStream } from 'node:fs';
createReadStream('large-file.txt').pipe(process.stdout);
Проста аналогія: stream — це як пити воду з крана, а не намагатися спочатку налити весь басейн у склянку.
Worker threads
Worker threads дозволяють запускати JavaScript у додаткових потоках для CPU-bound задач.
Worker threads корисні для:
- heavy computation;
- image processing у частині сценаріїв;
- parsing;
- compression;
- crypto-heavy tasks;
- background CPU work;
- не блокувати event loop.
Важливо: Node.js чудовий для I/O-heavy задач, але CPU-heavy робота може блокувати event loop. Для цього потрібні workers, окремі процеси або інші мови/сервіси.
Child processes
Node.js може запускати зовнішні процеси.
Приклад:
import { execFile } from 'node:child_process';
execFile('node', ['--version'], (error, stdout) => {
if (error) throw error;
console.log(stdout);
});
Child processes корисні для:
- CLI wrappers;
- automation;
- build tools;
- запуску системних команд;
- parallel work;
- інтеграції з legacy tools.
Критично: не підставляйте неперевірений user input у shell-команди. Це може створити command injection.
File system API
Node.js має API для роботи з файлами.
Приклад:
import { writeFile, readFile } from 'node:fs/promises';
await writeFile('hello.txt', 'Hello Node.js\n');
const text = await readFile('hello.txt', 'utf8');
console.log(text);
File system API корисний для:
- scripts;
- CLI tools;
- uploads;
- configuration files;
- logs;
- build tools;
- static site generation;
- data processing.
Практична роль: Node.js часто використовують для автоматизації саме тому, що JavaScript може легко працювати з файлами й JSON.
WebSocket і real-time
Node.js добре підходить для real-time застосунків.
Сценарії:
- chat;
- multiplayer state sync у частині backend-сценаріїв;
- live notifications;
- dashboards;
- collaboration tools;
- support widgets;
- WebSocket APIs;
- event streaming.
Перевага: event-driven модель Node.js добре пасує задачам, де багато клієнтів очікують подій у реальному часі.
REST API
Node.js часто використовують для REST API.
Типовий REST API включає:
- routing;
- controllers;
- validation;
- authentication;
- authorization;
- database access;
- error handling;
- logging;
- rate limiting;
- OpenAPI documentation;
- tests.
Приклад endpoint:
app.get('/users/:id', async (req, res) => {
const user = await findUserById(req.params.id);
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user);
});
Важливо: хороший API — це не тільки routes. Це validation, permissions, errors, logs, tests і documentation.
Database access
Node.js може працювати з багатьма базами даних:
- PostgreSQL;
- MySQL;
- MariaDB;
- SQLite;
- MongoDB;
- Redis;
- Elasticsearch/OpenSearch;
- DynamoDB;
- Cassandra;
- ClickHouse.
Поширені підходи:
- raw SQL client;
- query builder;
- ORM;
- database driver;
- connection pooling;
- migrations.
Критично: не збирайте SQL через конкатенацію user input. Використовуйте parameterized queries або ORM/query builder, щоб зменшити ризик SQL injection.
Prisma
Prisma — популярний ORM/toolkit для Node.js і TypeScript.
Prisma корисна для:
- typed database access;
- schema modeling;
- migrations;
- autocomplete;
- TypeScript-first backend;
- PostgreSQL/MySQL/SQLite та інших сценаріїв;
- швидкого development.
Практична роль: Prisma часто обирають, коли хочуть зручний typed шар між TypeScript-кодом і базою даних.
Testing
Node.js має вбудований test runner і велику екосистему test tools.
Тести можуть перевіряти:
- functions;
- APIs;
- database logic;
- validation;
- auth;
- CLI commands;
- integration scenarios;
- error handling.
Приклад:
import test from 'node:test';
import assert from 'node:assert/strict';
test('adds numbers', () => {
assert.equal(2 + 2, 4);
});
Практична роль: вбудований test runner зменшує потребу одразу ставити сторонній framework для простих тестів.
Debugging
Node.js підтримує debugging через inspector.
Приклад:
node --inspect server.js
node --inspect-brk server.js
Debugging корисний для:
- breakpoints;
- memory leaks;
- performance issues;
- async stack traces;
- API bugs;
- local development;
- profiling.
Практична роль: console.log корисний, але debugger часто швидше показує, що реально відбувається в коді.
Logging
Node.js-застосунки потребують нормального логування.
Логи мають включати:
- request id;
- timestamp;
- level;
- message;
- error stack;
- user/session context без приватних даних;
- service name;
- latency;
- status code.
Важливо: не логувати паролі, access tokens, приватні ключі або повні персональні дані. Логи часто живуть довше, ніж здається.
Security
Безпека Node.js включає багато шарів:
- dependency scanning;
- input validation;
- output encoding;
- CSRF у відповідних web-сценаріях;
- CORS configuration;
- rate limiting;
- authentication;
- authorization;
- secrets management;
- SQL injection protection;
- command injection protection;
- SSRF protection;
- secure cookies;
- HTTPS;
- dependency updates;
- safe file uploads.
Критично: найбільша небезпека Node.js-проєкту часто не в самому Node.js, а в залежностях, secrets, input validation і неправильній auth-логіці.
Dependency security
Node.js-проєкти часто мають багато dependencies.
Потрібно контролювати:
- package reputation;
- maintainer activity;
- dependency tree;
- lockfile;
- known vulnerabilities;
- typosquatting;
- postinstall scripts;
- supply chain attacks;
- abandoned packages;
- license compatibility.
Практична порада: не ставте пакет лише тому, що він вирішує одну дрібну задачу. Кожна dependency — це частина вашого supply chain.
package-lock.json
package-lock.json фіксує точні версії dependencies.
Він корисний для:
- reproducible installs;
- CI/CD;
- security audits;
- dependency review;
- однакових builds;
- troubleshooting;
- team consistency.
Практична роль: lockfile допомагає команді встановлювати однакові dependency versions, а не “приблизно ті самі”.
Performance
Node.js performance залежить від:
- event loop health;
- async I/O;
- database queries;
- JSON parsing;
- memory usage;
- garbage collection;
- CPU-bound tasks;
- clustering/workers;
- caching;
- connection pooling;
- logging overhead;
- network latency.
Важливо: повільний Node.js API часто гальмує не через JavaScript, а через базу даних, зовнішній API, неправильні індекси або блокування event loop.
Memory leaks
Memory leak у Node.js може виникати через:
- глобальні caches без limit;
- event listeners, які не видаляються;
- closures з великими об’єктами;
- queues без backpressure;
- збереження request objects;
- streams без правильного завершення;
- неконтрольований in-memory state.
Критично: Node.js-сервер може працювати швидко на старті, але поступово “пухнути” через memory leak. Моніторинг пам’яті обов’язковий.
Node.js і Docker
Node.js часто запускають у Docker.
Приклад Dockerfile:
FROM node:24-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN addgroup -S app && adduser -S app -G app
USER app
EXPOSE 3000
CMD ["node", "server.js"]
Docker корисний для Node.js через:
- reproducible environment;
- однакову версію Node.js;
- CI/CD;
- deployment;
- dependency isolation;
- multi-stage builds;
- production images;
- локальні dev stacks.
Практична роль: Docker дозволяє не сперечатися, у кого яка версія Node.js стоїть локально.
Node.js і frontend frameworks
Node.js часто потрібен навіть у frontend-проєктах, бо dev tools працюють на Node.js.
Node.js використовується для:
- Vite;
- Webpack;
- Next.js;
- Nuxt;
- Angular CLI;
- Vue tooling;
- React tooling;
- ESLint;
- Prettier;
- TypeScript compiler;
- test runners;
- bundlers;
- dev servers.
Цікавий факт: навіть якщо сайт працює в браузері, його build system майже завжди працює на Node.js.
Node.js і Deno
Deno — сучасне JavaScript/TypeScript runtime, створене як альтернатива Node.js із іншими defaults.
| Критерій | Node.js | Deno |
|---|---|---|
| Історія | Старіший і найпоширеніший runtime | Новіший runtime |
| Package ecosystem | npm як основа | Має власні підходи й npm-сумісність у частині сценаріїв |
| TypeScript | Через tooling | TypeScript-first підхід |
| Permissions | Традиційно більш відкритий runtime | Сильніша permission model за замовчуванням |
Висновок: Node.js має найбільшу екосистему й adoption, а Deno цікавий сучаснішими defaults і TypeScript-first філософією.
Node.js і Bun
Bun — інший JavaScript runtime і toolkit, який робить акцент на швидкості, bundling, package management і developer experience.
| Критерій | Node.js | Bun |
|---|---|---|
| Екосистема | Найбільша й найзріліша | Швидко розвивається |
| Runtime | V8 | JavaScriptCore |
| Tooling | npm, node, ecosystem tools | runtime + bundler + package manager у одному toolkit |
| Production maturity | Дуже широка | Залежить від сценарію й сумісності |
Висновок: Bun цікавий швидкістю й integrated tooling, але Node.js залишається стандартним вибором для більшості production JavaScript backend-проєктів.
Node.js і Python
| Критерій | Node.js | Python |
|---|---|---|
| Мова | JavaScript / TypeScript | Python |
| Сильні сторони | Web APIs, real-time, frontend/backend єдність, npm | Data science, scripting, backend, automation, ML |
| Concurrency | Event-driven async I/O | Async є, але традиційно багато sync-коду |
| Ecosystem | npm | PyPI |
Висновок: Node.js часто зручніший для JavaScript-first web-команд, а Python — для data, ML, scripting і багатьох backend-сценаріїв.
Node.js і PHP
| Критерій | Node.js | PHP |
|---|---|---|
| Основний фокус | General server-side JavaScript runtime | Web-first server-side language |
| Real-time | Сильний через event-driven модель | Можливо, але не головний історичний сценарій |
| Ecosystem | npm | Composer, WordPress/Laravel/Symfony ecosystem |
| Типові задачі | API, realtime, tooling, full-stack JS | CMS, web apps, Laravel, traditional web hosting |
Висновок: PHP дуже сильний у класичному web і CMS, а Node.js — у JavaScript-first API, real-time і tooling-сценаріях.
Переваги Node.js
Основні переваги Node.js:
- JavaScript на сервері;
- велика npm-екосистема;
- asynchronous I/O;
- добра придатність для API;
- real-time застосунки;
- швидкий старт проєктів;
- багато frameworks;
- TypeScript-friendly ecosystem;
- зручність для CLI tools;
- активна спільнота;
- cross-platform;
- Docker-friendly;
- підходить для serverless;
- одна мова для frontend і backend;
- сильний tooling ecosystem.
Головна перевага: Node.js дозволяє будувати повний web stack навколо JavaScript і TypeScript.
Обмеження Node.js
Node.js має обмеження.
Можливі проблеми:
- CPU-heavy задачі можуть блокувати event loop;
- dependency tree може бути дуже великим;
- npm supply chain потребує уваги;
- async-код може бути складним для debugging;
- memory leaks важко помітити без monitoring;
- не всі задачі виграють від JavaScript;
- погана validation швидко створює security-ризики;
- різниця CommonJS/ESM іноді плутає;
- занадто багато frameworks і tools ускладнюють вибір;
- single-threaded mental model часто неправильно розуміють.
Помилка: думати, що Node.js автоматично швидкий у всьому. Він сильний у I/O-heavy задачах, але не завжди найкращий для важких CPU-обчислень.
Коли варто використовувати Node.js
Node.js добре підходить, якщо потрібно:
- REST API;
- real-time app;
- WebSocket service;
- backend for frontend;
- full-stack JavaScript;
- TypeScript backend;
- CLI tool;
- build tool;
- automation script;
- serverless function;
- microservice;
- API gateway;
- SSR framework;
- швидкий prototype;
- команда вже знає JavaScript.
Практична порада: Node.js варто обирати, коли головна задача — багато I/O, API, realtime або JavaScript/TypeScript-first розробка.
Коли Node.js може бути невдалим вибором
Node.js може бути не найкращим вибором, якщо:
- основна задача — важкі CPU-обчислення;
- потрібна low-level system programming;
- команда не знає JavaScript/TypeScript;
- важлива максимальна простота dependency tree;
- потрібні scientific computing або ML-first workflows;
- застосунок краще лягає на Go, Rust, Java або Python;
- немає готовності контролювати npm dependencies;
- потрібна дуже сувора static typing без TypeScript-компромісів.
Важливо: Node.js універсальний, але не повинен бути відповіддю на кожну технічну задачу.
Хороші практики Node.js
Рекомендовано:
- використовувати LTS у production;
- фіксувати версію Node.js через `.nvmrc`, Volta або Docker image;
- комітити lockfile;
- використовувати TypeScript у середніх і великих проєктах;
- не блокувати event loop;
- робити input validation;
- використовувати parameterized queries;
- не зберігати secrets у коді;
- оновлювати dependencies;
- писати тести;
- використовувати structured logging;
- додати health endpoint;
- налаштувати graceful shutdown;
- моніторити memory і event loop lag;
- не ставити зайві dependencies;
- запускати production app через process manager або orchestrator.
Головне правило: хороший Node.js-проєкт — це не просто `npm install` і server.js, а контроль версій, dependencies, безпеки, логів, тестів і production behavior.
Типові помилки початківців
Поширені помилки:
- плутати Node.js із браузерним JavaScript;
- не розуміти event loop;
- блокувати сервер важким sync-кодом;
- не обробляти errors у async-коді;
- не використовувати lockfile;
- ставити забагато npm-пакетів;
- зберігати secrets у `.env` і комітити його;
- збирати SQL через рядки;
- не перевіряти user input;
- запускати production на випадковій Current-версії;
- не мати tests;
- не мати graceful shutdown;
- ігнорувати memory leaks;
- не обмежувати CORS;
- думати, що TypeScript автоматично захищає runtime data.
Небезпека: Node.js дозволяє дуже швидко написати API, але так само швидко можна створити небезпечний API без validation, auth і нормальної обробки помилок.
Цікаві факти про Node.js
- Node.js дозволив JavaScript вийти з браузера на сервер.
- Node.js використовує V8 — JavaScript engine, який також працює в Chrome. :contentReference[oaicite:4]{index=4}
- Node.js може створити HTTP server без стороннього framework.
- npm став однією з найбільших package-екосистем у світі JavaScript.
- Багато frontend-інструментів працюють на Node.js, навіть якщо фінальний сайт запускається в браузері.
- Node.js особливо сильний у I/O-heavy задачах.
- `latest` Node.js не завжди найкращий вибір для production; LTS зазвичай безпечніший для стабільних систем. :contentReference[oaicite:5]{index=5}
- Node.js може запускати CLI tools, backend APIs, dev servers, build systems і serverless functions.
Найлюдяніший факт: Node.js — це причина, чому JavaScript-розробник може одного дня писати кнопку в браузері, наступного — API для цієї кнопки, а потім ще й CLI для деплою.
Приклади сценаріїв використання
REST API для web-застосунку
Node.js запускає Express або Fastify server, приймає HTTP-запити, перевіряє дані, працює з PostgreSQL і повертає JSON.
Real-time chat
Node.js через WebSocket підтримує багато активних з’єднань і надсилає повідомлення користувачам у реальному часі.
CLI tool
Розробник пише command line tool на Node.js для генерації файлів, запуску scripts або автоматизації проєкту.
Frontend tooling
Vite, ESLint, Prettier, TypeScript compiler і test runner працюють у Node.js-середовищі.
Serverless function
Node.js запускає коротку функцію в cloud platform для обробки webhook, API-запиту або background task.
Підказка: найкращий перший Node.js-проєкт — невеликий API з одним endpoint, validation, логуванням і підключенням до бази даних.
Приклад простого HTTP-сервера
import { createServer } from 'node:http';
const server = createServer((req, res) => {
if (req.url === '/health') {
res.writeHead(200, { 'content-type': 'application/json' });
res.end(JSON.stringify({ ok: true }));
return;
}
res.writeHead(404, { 'content-type': 'application/json' });
res.end(JSON.stringify({ error: 'Not found' }));
});
server.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
Практична роль: цей приклад показує, що Node.js уже має базові серверні можливості без framework.
Приклад Express API
import express from 'express';
const app = express();
app.use(express.json());
app.get('/health', (req, res) => {
res.json({ ok: true });
});
app.post('/echo', (req, res) => {
res.json({
received: req.body
});
});
app.listen(3000, () => {
console.log('API running on http://localhost:3000');
});
Важливо: endpoint `/echo` підходить для демонстрації, але в production потрібно додати validation і обмеження розміру body.
Джерела
- Офіційний сайт Node.js.
- Node.js Documentation.
- Node.js Download page.
- Node.js Releases.
- Node.js Learn: V8 JavaScript Engine.
- V8 official website.
- Документація npm.
- Документація Node.js щодо HTTP, filesystem, streams, worker threads, test runner, modules, permissions, security і performance.
- Матеріали щодо Express, Fastify, NestJS, TypeScript, Docker, CI/CD, DevOps, backend JavaScript і web security.
Висновок
Node.js — це open source JavaScript runtime, який дозволяє запускати JavaScript поза браузером і створювати servers, web apps, CLI tools, scripts, API, real-time сервіси й backend-застосунки. Він базується на V8 JavaScript engine, має велику npm-екосистему, сильну підтримку asynchronous I/O і добре підходить для JavaScript/TypeScript-first команд.
Node.js найкраще розкривається в I/O-heavy задачах: API, WebSocket, serverless, tooling, automation і backend for frontend. Водночас він потребує дисципліни: контроль dependencies, LTS-версії, input validation, security, logging, testing, monitoring, graceful shutdown і уважне ставлення до event loop.
Головна думка: Node.js перетворив JavaScript із мови браузера на універсальний інструмент для серверів, API, CLI й сучасної web-інфраструктури.
Див. також
- JavaScript
- TypeScript
- V8
- npm
- npx
- Express.js
- Fastify
- NestJS
- REST API
- GraphQL
- WebSocket
- Docker
- PostgreSQL
- Redis
- MongoDB
- Deno
- Bun
- Frontend
- Backend
- DevOps
- CI/CD
- Serverless
- Логування
- Безпека застосунків
- Приватність даних
- Документація