Node.js: справочник и путь обучения с нуля

Содержание

Node.js — среда, которая запускает JavaScript вне браузера. Этот раздел собирает то, что нужно знать о ней на практике: не пересказ официальной документации, а разбор мест, где обычно ошибаются.

Как устроен этот справочник

Код запускается перед публикацией. Если в статье стоит бейдж «примеры выполнены на Node.js v22.23.1» — значит, весь код прогнан, а в тексте фактический вывод консоли. Не «должно вывести», а «вывело».

Числа — из собственных замеров. Мы не берём цифры из чужих статей. Когда написано, что синхронное чтение файла на 117 МБ останавливает событийный цикл, — это результат замера, где 10-миллисекундный таймер не сработал ни разу за 269 мс.

Где не проверяли — сказано прямо. В разборе MySQL живого сервера у нас не было, и об этом написано в самой статье. Бейджа «проверено» там нет.

Путь для начинающего

Порядок не случайный: каждый шаг опирается на предыдущий.

С чего начать и куда двигаться дальше
  1. 1 Что такое Node.jsСобытийный цикл, один поток и почему это не медленно
  2. 2 УстановкаСразу правильно: apt даёт версию без поддержки
  3. 3 Первый HTTP-серверПять строк, ноль зависимостей
  4. 4 Промисы и async/awaitБез них дальше ничего не понять
  5. 5 Файлы и потокиГде живёт большинство ошибок новичков

Не пропускайте промисы. Это единственный шаг, без которого остальное превращается в копирование кода без понимания: и файловая система, и базы, и сокеты — всё асинхронное.

Что прочитать, даже если Node уже знаком

Места, где ошибаются и опытные. Каждое подтверждено замером:

Что Замер
readFileSync блокирует всё 269 мс — ноль тиков 10-мс таймера
await в цикле 1021 мс против 204 мс через Promise.all
readFile против потока +169 МБ памяти против кусков по 64 КБ
exec против execFile инъекция команд возможна и невозможна
matchedCountmodifiedCount matched: 2, modified: 0 на повторе
Индекс в MongoDB 20 000 просмотренных документов против одного
Brotli по умолчанию в 8 раз медленнее gzip ради 14% размера
socket.id меняется после переподключения приходит другой id
cpus() врёт в контейнере показывает ядра хоста, а не лимит

Сквозная мысль всего раздела

Если читать материалы подряд, видно: половина ошибок в Node — это один и тот же принцип в разных костюмах.

Дорого не действие — дорого повторение накладных расходов.

Где По одному Пачкой
Запись в файл 433 мс 64 мс через дескриптор
Команды Redis 114 мс 8 мс пайплайном
Вставка в MongoDB N раундтрипов один insertMany
Задачи в цикле 1021 мс 204 мс через Promise.all

Защита работает не тем, что данные почистили, а тем, что интерпретировать их некому. execFile передаёт аргументы массивом мимо оболочки; параметризованный SQL отправляет данные мимо парсера запроса. Один принцип, два места.

Единственный поток — и преимущество, и потолок. Синхронное чтение файла и обычный счётный цикл дают одинаковый результат: ноль тиков таймера. Природа разная — диск и процессор, — вывод один.

Технологии редко умирают от плохого качества — их перестают выбирать. Так вышло с Memcached и Sails.js: оба работают до сих пор, просто экосистема ушла в другую сторону.

Полный индекс по темам

Ниже — все материалы раздела по темам. Клиентский JavaScript, DOM и jQuery — в соседнем разделе уроки JavaScript.

Полный список статей по темам

Node.js (42)

  1. Установка Node.js на Ubuntu: nvm, NodeSource или apt 7 мин
  2. HTTP-сервер на Node.js: «Hello, World!» без фреймворков 6 мин
  3. Middleware в Node.js: как устроена цепочка обработчиков 4 мин
  4. Redis в Node.js: кэш, счётчики, очереди и блокировки 6 мин
  5. EventEmitter в Node.js: события своими руками 6 мин
  6. ORM в Node.js: Sequelize, Prisma и когда ORM не нужен 5 мин
  7. Socket.io: чат на Node.js и что он добавляет к WebSocket 6 мин
  8. Объект process в Node.js: argv, env, память и выход 6 мин
  9. child_process в Node.js: exec, execFile, spawn и fork 6 мин
  10. Паттерны проектирования в Node.js: какие реально нужны 5 мин
  11. Node.js Promise: промисы и async/await на практике 7 мин
  12. Свой модуль в Node.js и публикация в NPM 6 мин
  13. Глобальные объекты Node.js: globalThis, Buffer, таймеры 6 мин
  14. Модуль os в Node.js: информация о системе и железе 5 мин
  15. Потоки в Node.js: Stream, pipeline и почему не readFile 6 мин
  16. Сжатие данных в Node.js: zlib, gzip и brotli 6 мин
  17. Buffer в Node.js: работа с бинарными данными 4 мин
  18. Cluster в Node.js: используем все ядра процессора 4 мин
  19. ESM против CommonJS: import и require в Node.js 4 мин
  20. Event Loop в Node.js: фазы и порядок выполнения 4 мин
  21. Express с нуля: первый сервер за 10 минут 4 мин
  22. Graceful shutdown в Node.js: корректное завершение сервера 3 мин
  23. HTTP-клиент в Node.js: fetch и запросы к API 4 мин
  24. JWT-авторизация в Express: токены на практике 4 мин
  25. Middleware в Express: сердце фреймворка 4 мин
  26. REPL в Node.js: интерактивная консоль для экспериментов 3 мин
  27. REST API на Express: строим по правилам 4 мин
  28. Transform-потоки в Node.js: обработка данных на лету 4 мин
  29. URL и строка запроса в Node.js: разбор и сборка 3 мин
  30. Worker threads в Node.js: параллельные вычисления 4 мин
  31. Валидация в Express: проверка входящих данных 4 мин
  32. Логирование в Node.js: от console.log к нормальным логам 4 мин
  33. Маршрутизация в Express: пути, параметры, роутеры 4 мин
  34. Модуль crypto в Node.js: хеши, соль, шифрование 4 мин
  35. Модуль readline в Node.js: чтение ввода построчно 3 мин
  36. Модуль util в Node.js: промисификация и отладка 3 мин
  37. Обработка ошибок в Express: middleware ошибок 4 мин
  38. Обработка ошибок в Node.js: не дать серверу упасть 4 мин
  39. Отладка Node.js: от console.log до отладчика 4 мин
  40. Переменные окружения в Node.js: конфигурация и секреты 4 мин
  41. Таймеры в Node.js: setTimeout, setInterval, setImmediate 4 мин
  42. Управление памятью в Node.js: куча, утечки, профилирование 4 мин

Частые вопросы

Сколько времени займёт этот путь?
Первые четыре шага — установка, сервер, промисы, файлы — реально пройти за выходные, если писать код, а не читать. Дальше зависит от задачи.
Нужно ли знать JavaScript перед Node.js?
Да, базу. Node — среда для того же языка, поэтому переменные, функции, объекты и async/await должны быть знакомы. Начать можно с раздела уроки JavaScript.
Почему в статьях примеры на ESM, а не на require?
Потому что import — стандарт, а require — наследие. Код на require вы встретите в старых проектах, и он работает, но новый писать на нём незачем.
Что значит бейдж «примеры выполнены»?
Что весь код статьи был запущен перед публикацией, а в тексте приведён фактический вывод консоли. Версия платформы и дата указаны там же — проверку можно повторить.
С чего начать, если Node уже знаком?
С разборов, где есть замеры: блокировка событийного цикла, память при чтении файлов, matchedCount против modifiedCount в MongoDB.