Node.js - серверный JavaScript
Node.js
JavaScript в браузере ограничен песочницей. Node.js — программа, которая выполняет JS на сервере или в CLI — сеть, файлы, процессы, криптография. Один язык на фронте (React) и в API (Express) ускоряет обучение и работу команды.
Рекомендуемый порядок: первая программа → эта статья (устройство runtime) → npm и структура проекта → встроенные модули → Express → Fullstack.
Маршрут по разделу Node.js
| № | Тема | Статья |
|---|---|---|
| 1 | Первая программа, Express API | Первая программа на Node.js |
| 2 | Runtime, event loop, модули | вы здесь |
| 3 | npm: install, scripts, audit | npm — команды, зависимости и lock-файлы |
| 4 | Папки, package.json, env | Структура Node-проекта и правила разработки |
| 5 | fs, http, потоки | Встроенные модули Node.js — fs, потоки и http |
| 6 | Express: middleware, CORS | Express — middleware, маршруты и ошибки |
| 7 | CLI, Docker, production | CLI Node.js — запуск, отладка и деплой |
| 8 | API + фронт | Fullstack на JavaScript — API и фронтенд |
| — | Шпаргалка API | Справочник по Node |
Что такое Node.js
Node.js — среда выполнения JavaScript вне браузера: движок V8 (как в Chrome) плюс привязки к ОС через libuv. Сильная сторона платформы — I/O-bound нагрузка: много одновременных соединений при умеренном расходе RAM. Долгие вычисления в одном потоке лучше выносить в worker_threads или отдельный сервис.
Проверка установки:
node -v
npm -v
Минимальный сервер на встроенном http (разбор построчно — Встроенные модули Node.js — fs, потоки и http):
const { createServer } = require('node:http');
const hostname = '127.0.0.1';
const port = 3000;
const server = createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
node server.js
Скачать LTS: nodejs.org. Несколько версий на одной машине — nvm (см. ниже).
История
Райан Даль выпустил Node.js в 2009 году, предложив event loop и неблокирующий I/O вместо модели "поток на каждый запрос". С появлением npm (2010) выросла крупнейшая экосистема пакетов для одного языка. С 2015 года идут параллельные линии LTS (долгая поддержка, обычно 30+ месяцев) и Current (свежие возможности). Для production берите LTS.
Архитектура — event loop
Сердце Node — цикл событий на libuv:
- JS вызывает, например,
fs.readFile()— задача уходит в пул потоков libuv. - Основной поток не ждёт — выполняет следующий JS.
- По завершении I/O колбэк попадает в очередь; event loop вызывает его в V8.
Так достигается высокая пропускная способность при сетевых и файловых операциях. Синхронные API (readFileSync) и долгий CPU-код в одном потоке блокируют весь сервер — для вычислений используйте worker_threads или вынос в отдельный сервис.
Подробнее про fs, потоки и http — Встроенные модули Node.js — fs, потоки и http.
Принципы платформы
Ядро намеренно небольшое — сеть, файлы и процессы есть в стандартной библиотеке, а фреймворки и ORM живут в npm. Пакеты обычно делают одну задачу, I/O по умолчанию асинхронный (*Sync — исключение для скриптов и редких случаев). Один язык на фронте и в API упрощает общие типы, особенно с TypeScript.
Встроенные модули, с которыми вы столкнётесь чаще всего — fs, http/https, stream, child_process, crypto, os, path, worker_threads.
Установка
Официальный установщик (Windows .msi, macOS .pkg, Linux через NodeSource) — node и npm в PATH.
nvm (macOS/Linux) — несколько версий Node:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install --lts
nvm use --lts
В корне проекта файл .nvmrc с версией (20) — nvm use без аргументов. На Windows — nvm-windows.
Глобальные объекты
| Объект | Назначение |
|---|---|
global | Корень глобального контекста (аналог window) |
process | argv, env, cwd(), сигналы, exit() |
console | log / error / time — stderr vs stdout важен для логов |
Buffer | Бинарные данные |
__dirname, __filename | Путь модуля (только CommonJS) |
setTimeout, setInterval, setImmediate | Таймеры в фазах event loop |
Пример process:
console.log(process.env.NODE_ENV);
console.log(process.argv.slice(2));
Модули — CommonJS и ESM
CommonJS (исторически по умолчанию):
// math.cjs
const add = (a, b) => a + b;
module.exports = { add };
const { add } = require('./math.cjs');
ES Modules — стандарт JS: import / export. Включение: "type": "module" в package.json или расширение .mjs.
export const add = (a, b) => a + b;
import { add } from './math.js';
| CommonJS | ESM | |
|---|---|---|
| Загрузка | Синхронная | Статический анализ |
| В Node по умолчанию | без "type": "module" | с "type": "module" |
| Смешивание | import() из CJS | default-обёртка при импорте CJS |
Зависимости и node_modules — npm — команды, зависимости и lock-файлы. Структура проекта — Структура Node-проекта и правила разработки.
Фреймворки поверх http
| Express | Fastify | NestJS | |
|---|---|---|---|
| Стиль | Гибкий, middleware | Скорость, JSON Schema | Модули, DI, TypeScript |
| Когда | MVP, обучение, legacy | High-load API | Крупные команды |
Учебный путь начинается с Express — Первая программа на Node.js, Express — middleware, маршруты и ошибки. Сравнение и production-паттерны — CLI Node.js — запуск, отладка и деплой.
Node.js и база данных
Серверный JS почти всегда связан с хранилищем: HTTP → Express → service → pool (pg) → PostgreSQL. Запросы к БД асинхронные — event loop продолжает принимать соединения.
Практики: один Pool на процесс, секреты в process.env, graceful shutdown (server.close() → pool.end()), параметризованные запросы $1, $2.
Интерактив ниже — REST, CRUD, пул соединений и связь с event loop.
Play ITЗагрузка интерактивного демо…
Пошаговый код REST + PostgreSQL в учебнике — блоки в Первая программа на Node.js и раздел "Практикум" в исторической версии материала; слои routes / models — Структура Node-проекта и правила разработки.
Как мыслить о Node в production
Чеклист перед production (подробнее — CLI Node.js — запуск, отладка и деплой):
- единая версия Node (
.nvmrc,engines); npm ciв CI, lock в Git;- структурированные логи и единый формат ошибок API;
GET /health, graceful shutdown;- секреты только в переменных окружения.
Практика и ссылки
- Первая программа на Node.js
- npm · Структура проекта · Встроенные модули
- Express · Fullstack
- Next.js
- Electron
Базовый разбор HTTP и HTTPS — HTTP как основа веб-интеграций.