Перейти к основному содержимому

Справочник по Node

Play ITЗагрузка интерактивного демо…


Область справочника

Справочник-шпаргалка по Node — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение — учебный курс: раздел Node.js. Таблицы синтаксиса, API, команд и параметров — для быстрого поиска фактов.

Компактные таблицы в §0.5 частично восходят к шпаргалке OverAPI Node.js (MIT, исходники); здесь они переведены и приведены к Node.js 20 LTS (без удалённых API вроде domain, встроенного punycode, new Buffer()).


Быстрый старт

npm install -g pm2
pm2 start src/index.js --name "my-app"
pm2 startup # автозапуск при старте системы
pm2 save # сохранить список процессов
pm2 logs my-app # просмотр логов

Справочные таблицы

Содержание справочника


0. Карта тем Node.js (курс + справочник)

Этот блок закрывает типовой маршрут изучения Node.js и связывает его со справочным API:

  1. Введение в Node.js — Node.js - серверный JavaScript
  2. Таймеры (setTimeout, setInterval, setImmediate)
  3. Модули и npmnpm — команды, зависимости и lock-файлы
  4. Структура проекта — Структура Node-проекта и правила разработки
  5. Работа с файловой системой (fs) — Встроенные модули Node.js — fs, потоки и http
    • введение в fs
    • синхронные операции
    • асинхронные операции через callback
    • асинхронные операции через then
    • асинхронные операции через async/await
    • fs.promises и сокращённые импорты
    • относительные пути и __dirname
    • проверка существования файла/папки
    • потоки (createReadStream, createWriteStream)
    • pipe
  6. Сервер на Node.js — Встроенные модули Node.js — fs, потоки и http, Первая программа на Node.js
    • разворачивание сервера
    • настройка ответа
    • понимание цикла "запрос -> обработка -> ответ"
    • объект запроса (req) и объект ответа (res)
    • базовый роутинг
    • отдача HTML из файлов
    • раздача ресурсов (CSS/JS/изображения)
    • статический сервер
    • шаблонизация и элементы в шаблонах

Для практики переходите к Первая программа на Node.js и Express — middleware, маршруты и ошибки, а ниже используйте A-Z как быстрый словарь API.


A-Z: быстрый словарь API Node.js

Ниже собраны ключевые элементы API из повседневной практики (сгруппированы по буквам, дубликаты объединены, формулировки нормализованы).

A

  • appendFile (fs) — добавляет данные в конец файла.
  • access (fs) — проверяет доступ к файлу или директории.
  • arch (os.arch()) — возвращает архитектуру процессора.
  • availableParallelism (os.availableParallelism()) — рекомендуемое число потоков параллелизма.
  • AssertionError (assert) — тип ошибки при провале утверждения.
  • assert (assert) — проверка истинности значения/утверждения.
  • addListener (EventEmitter) — добавляет обработчик события.
  • addEventListener (EventTarget) — добавляет обработчик события.
  • alloc (Buffer.alloc) — создаёт и инициализирует буфер.
  • allocUnsafe (Buffer.allocUnsafe) — создаёт неинициализированный буфер.
  • allocUnsafeSlow (Buffer.allocUnsafeSlow) — неинициализированный буфер вне малого пула.

B

  • basename (path.basename) — имя файла из полного пути.
  • byteLength (Buffer.byteLength) — количество байтов строки/данных.
  • byteOffset (Buffer) — смещение view в базовом ArrayBuffer.

C

  • copyFile (fs) — копирует файл.
  • createReadStream (fs) — открывает поток чтения.
  • createWriteStream (fs) — открывает поток записи.
  • closeSync (fs) — синхронно закрывает файловый дескриптор.
  • cp (fs) — копирует директории/деревья файлов.
  • chmod (fs) — меняет права доступа.
  • chown (fs) — меняет владельца/группу.
  • cpus (os.cpus) — сведения о логических ядрах CPU.
  • constants (os.constants) — системные константы.
  • Console (console.Console) — конструктор отдельного экземпляра консоли.
  • count (console.count) — счётчик вызовов по метке.
  • countReset (console.countReset) — сбрасывает счётчик по метке.
  • clear (console.clear) — очищает терминал/консоль.
  • cancelable (Event) — признак, можно ли отменить событие.
  • clearInterval — отменяет интервал.
  • clearImmediate — отменяет setImmediate.
  • clearTimeout — отменяет таймер.
  • compare (Buffer.compare) — сравнение буферов.
  • concat (Buffer.concat) — склейка массива буферов.
  • copyBytesFrom (Buffer.copyBytesFrom) — копирует байты из TypedArray/ArrayBuffer.
  • buffer.compare — сравнивает текущий буфер с другим.
  • buffer.copy — копирует данные текущего буфера в целевой.

D

  • delimiter (path.delimiter) — разделитель PATH-переменных (;/:).
  • dirname (path.dirname) — директория пути.
  • devNull (os.devNull) — путь к "нулевому" устройству.
  • deepStrictEqual (assert) — глубокая строгая проверка равенства.
  • doesNotMatch (assert) — проверяет, что строка не подходит под RegExp.
  • doesNotReject (assert) — проверяет, что промис не отклоняется.
  • dirxml (console.dirxml) — структурный вывод объекта/XML-подобного содержимого.
  • debug (console.debug) — отладочный вывод.
  • defaultPrevented (Event) — признак, что preventDefault() уже вызван.
  • defaultMaxListeners (events) — лимит слушателей по умолчанию.
  • dispatchEvent (EventTarget) — отправляет событие подписчикам.

E

  • extname (path.extname) — расширение файла.
  • EOL (os.EOL) — символ конца строки ОС.
  • endianness (os.endianness) — порядок байтов CPU.
  • escape (querystring.escape) — экранирует строку для URL.
  • error (console.error) — вывод ошибки.
  • EventEmitter (events) — базовый класс событий.
  • emit (EventEmitter) — вызывает слушателей события.
  • eventNames (EventEmitter) — список имён событий.
  • errorMonitor (events.errorMonitor) — специальный канал наблюдения ошибок.
  • EventTarget — модель событий Web-стиля в Node.
  • entries (Buffer.entries) — итератор пар [index, byte].
  • equals (Buffer.equals) — проверяет равенство буферов.

F

  • ftruncate (fs) — меняет размер файла по дескриптору.
  • fchmod (fs) — меняет права по дескриптору.
  • fchown (fs) — меняет владельца по дескриптору.
  • fstat (fs) — возвращает статистику по дескриптору.
  • futimes (fs) — меняет временные метки по дескриптору.
  • format (path.format) — собирает путь из объекта.
  • freemem (os.freemem) — свободная память.
  • fail (assert.fail) — явное падение проверки.
  • from (Buffer.from) — создаёт буфер из строки/массива/буфера.
  • fill (Buffer.fill) — заполняет буфер значением.

G

  • getPriority (os.getPriority) — приоритет планирования процесса.
  • group (console.group) — начинает группу сообщений.
  • groupCollapsed (console.groupCollapsed) — начинает свёрнутую группу.
  • groupEnd (console.groupEnd) — завершает группу.
  • getMaxListeners (EventEmitter) — текущий лимит слушателей.
  • getEventListeners (events.getEventListeners) — копия массива слушателей.

H

  • homedir (os.homedir) — домашний каталог пользователя.
  • hostname (os.hostname) — имя хоста.
  • hasRef (Timeout/Immediate) — влияет ли таймер на цикл событий.

I

  • isAbsolute (path.isAbsolute) — проверка абсолютного пути.
  • ifError (assert.ifError) — выбрасывает ошибку, если аргумент не null/undefined.
  • info (console.info) — информационный вывод.
  • isTrusted (Event) — пользовательское/программное происхождение события.
  • isBuffer (Buffer.isBuffer) — проверка, что объект — Buffer.
  • isEncoding (Buffer.isEncoding) — поддерживается ли кодировка.
  • includes (Buffer.includes) — содержит ли буфер значение.
  • indexOf (Buffer.indexOf) — первый индекс вхождения.

J

  • join (path.join) — объединяет сегменты пути.

K

  • keys (Buffer.keys) — итератор индексов буфера.

L

  • link (fs.link) — создаёт жёсткую ссылку.
  • lstat (fs.lstat) — статистика по пути без разыменования symlink.
  • loadavg (os.loadavg) — средняя системная нагрузка.
  • log (console.log) — стандартный вывод.
  • listenerCount (EventEmitter) — число слушателей события.
  • listeners (EventEmitter) — копия списка слушателей.
  • lastIndexOf (Buffer.lastIndexOf) — последний индекс вхождения.
  • length (Buffer.length) — длина буфера в байтах.

M

  • mkdir (fs.mkdir) — создаёт директорию.
  • mkdtemp (fs.mkdtemp) — создаёт временную директорию.
  • machine (os.machine) — тип аппаратной платформы.
  • match (assert.match) — проверка совпадения строки с RegExp.

N

  • realpath.native (fs.realpath.native) — реальный путь через нативный resolver.
  • normalize (path.normalize) — нормализует путь.
  • networkInterfaces (os.networkInterfaces) — сетевые интерфейсы.
  • notDeepStrictEqual (assert) — глубокое строгое неравенство.
  • notStrictEqual (assert) — строгое неравенство.

O

  • open (fs.open) — открывает файл и возвращает дескриптор.
  • opendir (fs.opendir) — открывает директорию для итерации.
  • on (EventEmitter.on) — добавляет слушателя в конец списка.
  • once (EventEmitter.once) — одноразовый слушатель.
  • off (EventEmitter.off) — удаляет конкретный слушатель.
  • once (events.once) — промис, который резолвится при событии.
  • on (events.on) — async-итератор событий.

P

  • parse (path.parse) — разбирает путь в объект.
  • posix (path.posix) — POSIX-реализации path-методов.
  • platform (os.platform) — платформа ОС.
  • parse (url.parse) — объект из URL (legacy API).
  • prependListener (EventEmitter) — слушатель в начало списка.
  • prependOnceListener (EventEmitter) — одноразовый слушатель в начало.
  • poolSize (Buffer.poolSize) — размер пула маленьких буферов.

R

  • readFile (fs.readFile) — читает файл целиком.
  • read (fs.read) — читает данные по файловому дескриптору.
  • rename (fs.rename) — переименовывает/перемещает файл.
  • rm (fs.rm) — удаляет файлы и директории.
  • readdir (fs.readdir) — читает содержимое директории.
  • rmdir (fs.rmdir) — удаляет директорию (legacy; чаще rm).
  • readlink (fs.readlink) — читает символьную ссылку.
  • realpath (fs.realpath) — канонический путь.
  • relative (path.relative) — относительный путь между двумя точками.
  • resolve (path.resolve) — абсолютный путь из сегментов.
  • release (os.release) — версия ОС.
  • rejects (assert.rejects) — ожидаемое отклонение промиса.
  • removeAllListeners (EventEmitter) — удаляет все/часть слушателей.
  • removeListener (EventEmitter) — удаляет один слушатель.
  • rawListeners (EventEmitter) — слушатели включая внутренние обёртки.
  • removeEventListener (EventTarget) — удаляет обработчик события.
  • ref (Timeout/Immediate) — удерживает активным event loop.
  • refresh (Timeout.refresh) — перезапускает таймер без нового объекта.

S

  • symlink (fs.symlink) — создаёт символьную ссылку.
  • stat (fs.stat) — статистика файла/директории.
  • sep (path.sep) — разделитель сегментов пути.
  • setPriority (os.setPriority) — устанавливает приоритет процесса.
  • stringify (querystring.stringify) — строка query-параметров из объекта.
  • strictEqual (assert.strictEqual) — строгая проверка равенства.
  • setMaxListeners (events.setMaxListeners) — лимит слушателей для эмиттеров.
  • setMaxListeners (EventEmitter#setMaxListeners) — лимит для конкретного эмиттера.
  • setImmediate — немедленное выполнение callback (после I/O phase).
  • setInterval — периодический таймер.
  • setTimeout — однократный таймер.

T

  • truncate (fs.truncate) — обрезает/расширяет файл до заданного размера.
  • toNamespacedPath (path.toNamespacedPath) — путь с namespace-префиксом (Windows).
  • type (os.type) — имя ОС (Windows_NT, Linux и т.д.).
  • totalmem (os.totalmem) — общий объём памяти.
  • tmpdir (os.tmpdir) — временная директория.
  • throws (assert.throws) — ожидаемое исключение в функции.
  • table (console.table) — табличный вывод.
  • time (console.time) — старт таймера по метке.
  • timeEnd (console.timeEnd) — остановка и вывод времени.
  • timeLog (console.timeLog) — промежуточное время.
  • trace (console.trace) — вывод stack trace.
  • timeStamp (Event.timeStamp) — время создания события.
  • toJSON (Buffer.toJSON) — JSON-представление буфера.
  • toString (Buffer.toString) — строка из буфера в выбранной кодировке.

U

  • unlink (fs.unlink) — удаляет файл/ссылку.
  • unwatchFile (fs.unwatchFile) — прекращает наблюдение за файлом.
  • utimes (fs.utimes) — меняет временные метки файла.
  • userInfo (os.userInfo) — данные текущего пользователя.
  • uptime (os.uptime) — время работы системы.
  • unescape (querystring.unescape) — декодирует URL-escaped строку.
  • unref (Timeout/Immediate) — не удерживает event loop активным.

V

  • version (os.version) — версия ядра/сборки ОС.
  • values (Buffer.values) — итератор байтов буфера.

W

  • writeFile (fs.writeFile) — записывает данные в файл целиком.
  • write (fs.write) — записывает данные через файловый дескриптор.
  • watchFile (fs.watchFile) — наблюдает за файлом через polling.
  • watch (fs.watch) — наблюдает за файлами/директориями (событийно).
  • win32 (path.win32) — Windows-реализации path-методов.
  • warn (console.warn) — предупреждающий вывод.
  • write (Buffer.write) — записывает строку в буфер.

0.5 Компактные шпаргалки

Таблицы для быстрого поиска по API. Подробные разборы — в §1§2; практика — Встроенные модули — fs, потоки и http.

Версия блока соответствует Node.js 20 LTS.

CommonJS: require, module, exports

ЭлементНазначение
require(id)Загружает модуль (core, файл, пакет из node_modules)
require.resolve(id)Абсолютный путь к модулю без выполнения
require.cacheКэш уже загруженных модулей
require.mainСсылка на главный модуль (точка входа)
module.exportsТо, что получает вызывающий код через require()
exportsСсылка на module.exports (удобство)
module.idПолный путь к файлу модуля
module.filenameИмя файла модуля
module.loadedtrue, если модуль уже выполнен
module.parentМодуль, который вызвал require (legacy; в ESM — граф импортов)
module.childrenМодули, загруженные из текущего
__filename, __dirnameПуть к файлу и каталогу (только CommonJS)

ESM-аналоги: import, import.meta.url, проверка точки входа — Точка входа — require.main и import.meta.


HTTP: IncomingMessage (req) и ServerResponse (res)

Справочник кодов: http.STATUS_CODES — объект { 200: 'OK', 404: 'Not Found', ... }.

Запрос (req):

Свойство / методНазначение
req.methodHTTP-метод (GET, POST, …)
req.urlПуть и query (без хоста)
req.headersЗаголовки (нижний регистр ключей)
req.httpVersionВерсия протокола (1.1)
req.setEncoding('utf8')Декодировать тело как строку
req.pause() / req.resume()Управление потоком чтения
'data', 'end', 'close'События тела запроса

Ответ (res):

Свойство / методНазначение
res.statusCodeКод ответа (по умолчанию 200)
res.writeHead(code, [reason], [headers])Статус и заголовки одним вызовом
res.setHeader(name, value)Установить заголовок
res.getHeader(name) / res.removeHeader(name)Чтение / удаление заголовка
res.writeContinue()Ответ 100 Continue (ожидание Expect: 100-continue)
res.write(chunk, [encoding])Фрагмент тела
res.end([data], [encoding])Завершить ответ (обязательно)
res.addTrailers(headers)Trailers после chunked-тела

Клиент: http.request(options, cb), сокращение http.get(options, cb), пул — http.globalAgent / https.globalAgent.


readline — интерактивный ввод в терминале

import readline from 'node:readline/promises';
import { stdin as input, stdout as output } from 'node:process';

const rl = readline.createInterface({ input, output });
const answer = await rl.question('Имя? ');
rl.close();
Метод / событиеНазначение
readline.createInterface({ input, output, prompt })Создать интерфейс
rl.question(query, cb) / await rl.question(query)Запросить строку
rl.setPrompt(prompt) / rl.prompt()Приглашение REPL-подобного CLI
rl.write(data, [key])Вставить текст в буфер ввода
rl.pause() / rl.resume() / rl.close()Управление и закрытие
'line'Пользователь нажал Enter
'close'Интерфейс закрыт
'SIGINT'Ctrl+C (можно перехватить для graceful exit)

repl — Read-Eval-Print Loop

import repl from 'node:repl';

repl.start({ prompt: '> ' });
ЭлементНазначение
repl.start([options])Запуск REPL (порт, eval, prompt)
'exit'Выход из сессии
Встроенные команды.help, .break, .clear, .load, .save, .exit

В CLI достаточно node без аргументов — тот же REPL.


StringDecoder — декодирование потока байтов в строку

Полезен при чтении бинарного потока по частям, когда многобайтовые символы UTF-8 могут «разрезаться» между chunk'ами.

import { StringDecoder } from 'node:string_decoder';

const decoder = new StringDecoder('utf8');
let text = '';
stream.on('data', (chunk) => { text += decoder.write(chunk); });
stream.on('end', () => { text += decoder.end(); });
МетодНазначение
decoder.write(buffer)Декодировать порцию; «хвост» символа хранится внутри
decoder.end([buffer])Финальный flush оставшихся байтов

Buffer: чтение и запись чисел

Современное создание: Buffer.alloc(n), Buffer.from(str|array) — не new Buffer().

МетодНазначение
buf.readUInt8(offset)Беззнаковый байт
buf.readUInt16LE / readUInt16BE16-bit unsigned
buf.readUInt32LE / readUInt32BE32-bit unsigned
buf.readInt8, readInt16LE, readInt32LEЗнаковые аналоги
buf.readFloatLE / readFloatBEIEEE 754 float
buf.readDoubleLE / readDoubleBEIEEE 754 double
buf.writeUInt8, writeUInt16LE, …Запись (симметрично read*)
buf.slice([start], [end])View на тот же memory (изменения видны в обоих)
buf.copy(target, [tStart], [sStart], [sEnd])Копирование байтов
Buffer.concat(list, [totalLength])Склейка массива буферов

DNS: типы записей

import dns from 'node:dns/promises';

await dns.lookup('example.com'); // A или AAAA
await dns.resolve4('example.com'); // только A
await dns.resolve6('example.com'); // только AAAA
await dns.resolveMx('example.com'); // MX
await dns.resolveTxt('example.com'); // TXT
await dns.resolveSrv('_service._tcp.example.com');
await dns.reverse('93.184.216.34'); // PTR
МетодТип записи
lookupIP-адрес (как getaddrinfo)
resolve4 / resolve6A / AAAA
resolveMxпочтовые серверы
resolveTxtтекстовые записи
resolveSrvсервисные записи
resolveNs / resolveCnameNS / CNAME
reverseобратное разрешение IP → имя

net.Socket: свойства и события

СвойствоНазначение
socket.remoteAddress / remotePortАдрес пира
socket.localAddress / localPortЛокальный endpoint
socket.bytesRead / bytesWrittenСтатистика I/O
socket.setTimeout(ms, cb)Таймаут бездействия
socket.setNoDelay(true)Отключить Nagle (TCP_NODELAY)
socket.setKeepAlive(true, [delay])TCP keep-alive
СобытиеКогда
connectСоединение установлено
dataПришли данные
endПир закончил передачу
closeСокет закрыт
errorОшибка
timeoutСработал таймаут
drainБуфер записи опустошён — можно снова write

Проверка IP: net.isIP(str)0 | 4 | 6; net.isIPv4, net.isIPv6.


cluster: процессы-воркеры

APIНазначение
cluster.isPrimarytrue в главном процессе (раньше isMaster)
cluster.isWorkertrue в воркере
cluster.fork([env])Новый воркер с тем же entry point
cluster.workers{ id: Worker } активных воркеров
worker.idЧисловой ID
worker.send(msg) / 'message'IPC между primary и worker
worker.disconnect() / 'disconnect'Мягкое отключение
'fork', 'online', 'listening', 'exit'Жизненный цикл воркера

Устаревшее: не использовать в новом коде

Было (старые шпаргалки)Сейчас
new Buffer(size|str|array)Buffer.alloc(), Buffer.from()
domainasync/await, try/catch, domain удалён
require('punycode')import punycode from 'punycode' (npm) или url.domainToASCII()
util.debug, util.puts, util.print, util.pumpconsole, stream.pipeline()
util.isArray, util.isDate, …Array.isArray(), util.types.isDate()
http.createClient()http.request() / http.get()
fs.exists()fs.access() или try { await fs.stat() }
cluster.isMastercluster.isPrimary
os.tmpDir()os.tmpdir()
response.sendDateпо умолчанию включено; редко настраивают вручную

1. Глобальные объекты и переменные

Node.js предоставляет ряд глобальных объектов, доступных без импорта.


global

Объект верхнего уровня, аналогичный window в браузере. Все свойства, присвоенные global, становятся глобальными.

global.myVar = 'hello';
console.log(myVar); // 'hello'

process

Объект, содержащий информацию о текущем процессе Node.js и методы для взаимодействия с ним.


Свойства process
  • process.argv — массив аргументов командной строки.
  • process.env — объект с переменными окружения.
  • process.pid — числовой идентификатор процесса.
  • process.platform — строка с именем платформы (win32, linux, darwin).
  • process.version — версия Node.js (например, 'v20.11.0').
  • process.versions — объект с версиями зависимостей (V8, OpenSSL, zlib и др.).
  • process.execPath — путь к исполняемому файлу Node.js.
  • process.cwd() — текущая рабочая директория.
  • process.arch — архитектура процессора (x64, arm64, ia32).
  • process.release — информация о сборке Node.js (тип, заголовки, исходники).

Методы process
  • process.exit([code]) — завершает процесс с кодом выхода.
  • process.nextTick(callback[, ...args]) — планирует вызов функции на следующей итерации цикла событий.
  • process.kill(pid[, signal]) — отправляет сигнал процессу.
  • process.chdir(directory) — изменяет текущую рабочую директорию.
  • process.memoryUsage() — возвращает объект с информацией об использовании памяти.
  • process.cpuUsage([previousValue]) — возвращает использование CPU в микросекундах.
  • process.hrtime([time]) — высокоточное измерение времени.
  • process.on(event, listener) — подписка на события (exit, SIGINT, uncaughtException и др.).

console

Объект для вывода информации в терминал.

Методы:

  • console.log()
  • console.info()
  • console.warn()
  • console.error()
  • console.time(label), console.timeEnd(label)
  • console.trace()
  • console.table(data)

Buffer

Глобальный класс для работы с бинарными данными.

Примеры:

const buf = Buffer.from('hello');
const buf2 = Buffer.alloc(10); // 10 байт, заполненных нулями
const buf3 = Buffer.allocUnsafe(10); // неинициализированный буфер

setTimeout, setInterval, setImmediate

Функции таймеров, унаследованные из браузерного JavaScript, но реализованные в Node.js через libuv.

  • setTimeout(callback, delay, ...args)
  • setInterval(callback, delay, ...args)
  • setImmediate(callback, ...args)

Отмена:

  • clearTimeout(timeoutObject)
  • clearInterval(intervalObject)
  • clearImmediate(immediateObject)

__dirname, __filename

Строки с абсолютным путём к текущему файлу и его директории. Доступны только в CommonJS.

В ESM заменяются на:


import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

2. Встроенные модули

Node.js поставляется с множеством встроенных модулей. Их можно импортировать без установки.


assert

Модуль для написания тестов и проверок.

Основные методы:

  • assert(value, message) — выбрасывает AssertionError, если value ложно.
  • assert.strictEqual(actual, expected)
  • assert.deepStrictEqual(actual, expected)
  • assert.throws(fn, ErrorConstructor)
  • assert.doesNotThrow(fn)

buffer

Работа с бинарными данными. Хотя Buffer глобален, модуль buffer предоставляет дополнительные утилиты.

Свойства:

  • Buffer.poolSize — размер пула для быстрого выделения памяти (по умолчанию 8192 байта).
  • Buffer.isBuffer(obj) — проверка, является ли объект буфером.

child_process

Создание дочерних процессов.

Методы:

  • child_process.spawn(command, [args], [options]) — запуск команды.
  • child_process.exec(command, [options], callback) — выполнение команды с буферизацией вывода.
  • child_process.execFile(file, [args], [options], callback)
  • child_process.fork(modulePath, [args], [options]) — создаёт новый процесс Node.js с IPC-каналом.

Опции:

  • cwd — рабочая директория.
  • env — переменные окружения.
  • stdio — настройка стандартных потоков (['pipe', 'pipe', 'pipe'] по умолчанию).
  • detached — запуск в фоне (Unix).
  • shell — использовать оболочку (/bin/sh, cmd.exe).

События дочернего процесса:

  • close
  • disconnect
  • error
  • exit
  • message

cluster

Модуль для создания нескольких процессов-воркеров, использующих общие порты.

Методы:

  • cluster.isPrimarytrue, если текущий процесс — основной.
  • cluster.isWorkertrue, если текущий процесс — воркер.
  • cluster.fork([env]) — создаёт новый воркер.
  • cluster.workers — объект с активными воркерами.

События:

  • fork
  • online
  • listening
  • disconnect
  • exit
  • setup

console

Уже описан выше как глобальный объект.


crypto

Криптографические функции:

  • хэши;
  • HMAC;
  • шифрование;
  • дешифрование;
  • генерация ключей.

Примеры:

const hash = crypto.createHash('sha256').update('data').digest('hex');
const cipher = crypto.createCipher('aes-192-cbc', key);
const decipher = crypto.createDecipher('aes-192-cbc', key);

Алгоритмы:

  • Хэши — md5, sha1, sha256, sha512
  • Шифрование — aes-128-gcm, aes-192-cbc, chacha20-poly1305
  • Ключи: generateKeyPair, createSecretKey

dgram

Работа с UDP-сокетами.

Методы:

  • dgram.createSocket(type[, callback])type: 'udp4' или 'udp6'.
  • socket.bind(port[, address][, callback])
  • socket.send(msg, offset, length, port, address, callback)
  • socket.close()

События:

  • message
  • listening
  • close
  • error

dns

Разрешение доменных имён.

Методы:

  • dns.lookup(hostname[, options], callback)
  • dns.resolve(hostname[, rrtype], callback)
  • dns.resolve4(hostname, callback)
  • dns.resolve6(hostname, callback)
  • dns.reverse(ip, callback)

Опции lookup:

  • family0 (любой), 4 (IPv4), 6 (IPv6)
  • hints: флаги, влияющие на выбор адреса

events

Базовый класс EventEmitter.

Методы:

  • emitter.on(eventName, listener)
  • emitter.once(eventName, listener)
  • emitter.emit(eventName, ...args)
  • emitter.removeListener(eventName, listener)
  • emitter.removeAllListeners([eventName])
  • emitter.listenerCount(eventName)
  • emitter.setMaxListeners(n)

fs (File System)

Работа с файловой системой.


Асинхронные методы (callback-based)
  • fs.readFile(path[, options], callback)
  • fs.writeFile(file, data[, options], callback)
  • fs.appendFile(file, data[, options], callback)
  • fs.unlink(path, callback) — удаление файла
  • fs.mkdir(path[, options], callback)
  • fs.rmdir(path[, options], callback)
  • fs.readdir(path[, options], callback)
  • fs.stat(path, callback) — информация о файле/директории
  • fs.access(path[, mode], callback) — проверка прав доступа
  • fs.copyFile(src, dest[, flags], callback)
  • fs.watch(filename[, options][, listener])
  • fs.watchFile(filename[, options], listener)

Синхронные методы
  • fs.readFileSync
  • fs.writeFileSync
  • fs.existsSync
  • fs.statSync
  • и так далее — суффикс Sync

Промисы и async/await

Доступны через fs.promises:


import { promises as fs } from 'fs';

const data = await fs.readFile('file.txt', 'utf8');

Потоковые операции
  • fs.createReadStream(path[, options])
  • fs.createWriteStream(path[, options])

Опции:

  • encoding — кодировка ('utf8', 'base64', 'binary')
  • flag — режим открытия ('r', 'w', 'a', 'wx', 'ax' и др.)
  • mode — права доступа (например, 0o666)
  • autoClose — автоматически закрывать поток
  • highWaterMark — размер внутреннего буфера

http

Модуль для создания HTTP-серверов и клиентов.


Сервер
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
});
server.listen(3000, '127.0.0.1', () => {
console.log('Server running at http://127.0.0.1:3000/');
});

Методы сервера:

  • server.listen(port, [hostname], [backlog], [callback])
  • server.close([callback])
  • server.address() — возвращает объект { port, family, address }

События сервера:

  • request — при получении запроса
  • connection — при установке TCP-соединения
  • close
  • error

Клиент
const req = http.request(options, (res) => {
res.on('data', (chunk) => { /* ... */ });
res.on('end', () => { /* ... */ });
});
req.write('data');
req.end();

Опции запроса:

  • host / hostname
  • port
  • path
  • method (GET, POST, и т.д.)
  • headers
  • timeout
  • agent — управление пулом соединений

События клиента:

  • response
  • socket
  • timeout
  • error

https

Расширение http с поддержкой TLS/SSL. Использует те же API, но требует сертификатов.

Пример сервера:

const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
https.createServer(options, (req, res) => {
res.end('Secure Hello\n');
}).listen(443);

net

Низкоуровневый модуль для работы с TCP-сокетами.

Сервер:

const server = net.createServer((socket) => {
socket.write('Echo server\r\n');
socket.pipe(socket); // эхо
});
server.listen(8124);

Клиент:

const client = net.createConnection({ port: 8124 }, () => {
client.write('Hello');
});

События:

  • connect
  • data
  • end
  • error
  • close
  • drain — когда буфер отправки освобождается

os

Информация о системе.

Методы:

  • os.arch() — архитектура (x64, arm64)
  • os.cpus() — массив информации о ядрах CPU
  • os.freemem() — свободная память в байтах
  • os.totalmem() — общая память
  • os.homedir() — домашняя директория пользователя
  • os.hostname() — имя хоста
  • os.networkInterfaces() — сетевые интерфейсы
  • os.platform()win32, linux, darwin
  • os.release() — версия ОС
  • os.tmpdir() — временная директория
  • os.uptime() — время работы системы в секундах
  • os.userInfo([options]) — информация о пользователе

path

Работа с путями файловой системы.

Методы:

  • path.join(...paths) — объединяет пути с учётом разделителя ОС
  • path.resolve(...paths) — преобразует в абсолютный путь
  • path.basename(path[, ext]) — имя файла
  • path.dirname(path) — директория
  • path.extname(path) — расширение
  • path.parse(path) — разбивает путь на объект { root, dir, base, name, ext }
  • path.format(pathObject) — обратная операция
  • path.isAbsolute(path) — проверка абсолютности
  • path.relative(from, to) — относительный путь между двумя точками
  • path.normalize(path) — нормализует путь (.., ., двойные слэши)

Свойства:

  • path.sep — разделитель (/ или \)
  • path.delimiter — разделитель переменных окружения (: или ;)

querystring

Парсинг и сериализация query-строк.

Методы:

  • querystring.parse(str[, sep][, eq][, options])
  • querystring.stringify(obj[, sep][, eq][, options])
  • querystring.escape(str)
  • querystring.unescape(str)

Опции:

  • maxKeys — максимальное число параметров
  • decodeURIComponent — функция декодирования значений

stream

Базовая абстракция для потоковой обработки данных.

Типы потоков:

  • Readable — источник данных
  • Writable — приёмник данных
  • Duplex — одновременно читаемый и записываемый (net.Socket)
  • Transform — Duplex с преобразованием (zlib.createGzip())

Методы Readable:

  • read([size])
  • setEncoding(encoding)
  • pause(), resume()
  • pipe(destination[, options])
  • unpipe([destination])

События Readable:

  • data
  • end
  • error
  • close
  • readable

Методы Writable:

  • write(chunk[, encoding][, callback])
  • end([chunk][, encoding][, callback])

События Writable:

  • drain
  • finish
  • error
  • close

timers

Уже частично описан через глобальные setTimeout и др. Дополнительно:

  • timers.setImmediate и timers.clearImmediate — доступны как модуль.
  • timers.promises — версии с промисами:
import { setTimeout } from 'timers/promises';
await setTimeout(1000);

tls

Работа с TLS-сокетами (без HTTP).

Создание сервера:

const server = tls.createServer(options, (socket) => {
socket.write('Secure connection\n');
});

Клиент:

const socket = tls.connect(8000, 'localhost', () => {
socket.write('Client hello');
});

tty

Проверка, является ли поток терминалом.

  • tty.isatty(fd) — возвращает true, если файловый дескриптор связан с TTY.
  • process.stdin.isTTY, process.stdout.isTTY — часто используются для определения контекста выполнения.

url

Парсинг и формирование URL.

Методы:

  • url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) — устаревший, но поддерживается.
  • new URL(input[, base]) — современный способ (Web Standard).
  • url.format(urlObject) — обратная операция к parse.
  • url.resolve(from, to) — разрешение относительного URL.

Пример:

const myURL = new URL('https://example.com:8080/path?query=1#frag');
console.log(myURL.hostname); // 'example.com'
console.log(myURL.port); // '8080'
console.log(myURL.searchParams.get('query')); // '1'

util

Утилитарные функции.

Методы:

  • util.inspect(object[, options]) — строковое представление объекта для отладки.
  • util.promisify(fn) — преобразует функцию с callback в промис.
  • util.callbackify(promiseFn) — обратная операция.
  • util.types.isDate(obj), util.types.isRegExp(obj) — точная типизация.
  • util.inherits(constructor, superConstructor) — устаревшее наследование (до ES6 классов).
  • util.format(format[, ...args]) — аналог printf.

Опции inspect:

  • depth — глубина рекурсии
  • colors — цветной вывод
  • showHidden — показывать неперечисляемые свойства
  • compact — компактный вывод

v8

Доступ к внутренним данным движка V8.

Методы:

  • v8.getHeapStatistics() — статистика кучи
  • v8.getHeapSpaceStatistics() — информация о сегментах кучи
  • v8.serialize(value) / v8.deserialize(buffer) — сериализация, совместимая с structured clone algorithm
  • v8.setFlagsFromString(flags) — динамическая настройка флагов V8

vm

Выполнение кода в изолированном контексте.

Пример:

const vm = require('vm');
const sandbox = { x: 1 };
vm.createContext(sandbox);
vm.runInContext('x += 1;', sandbox);
console.log(sandbox.x); // 2

Методы:

  • vm.createContext([sandbox])
  • vm.runInContext(code, contextifiedSandbox[, options])
  • vm.runInNewContext(code[, sandbox][, options])
  • vm.runInThisContext(code[, options])

worker_threads

Многопоточность в Node.js.

Основные элементы:

  • Worker — отдельный поток
  • parentPort — порт для обмена сообщениями
  • workerData — данные, переданные при создании
  • isMainThreadtrue в основном потоке
  • threadId — уникальный ID потока

Пример:

// main.js
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');
if (isMainThread) {
const worker = new Worker(__filename, { workerData: 42 });
worker.on('message', (msg) => console.log(msg));
} else {
parentPort.postMessage(workerData * 2);
}

zlib

Сжатие и распаковка данных.

Методы:

  • zlib.gzip(buf, callback)
  • zlib.gunzip(buf, callback)
  • zlib.deflate(buf, callback)
  • zlib.inflate(buf, callback)
  • zlib.brotliCompress(buf, callback)
  • zlib.brotliDecompress(buf, callback)

Потоковые версии:

  • zlib.createGzip()
  • zlib.createGunzip()
  • zlib.createDeflate()
  • zlib.createInflate()
  • zlib.createBrotliCompress()
  • zlib.createBrotliDecompress()

3. Параметры командной строки (node --help)

Node.js поддерживает множество флагов при запуске.


Основные флаги

  • --version / -v — вывод версии
  • --help / -h — справка
  • --eval "code" / -e "code" — выполнить JavaScript-код
  • --print "code" / -p "code" — выполнить и вывести результат
  • --require module / -r module — загрузить модуль до запуска скрипта
  • --input-type=type — указать тип входных данных (module или commonjs) при использовании --eval
  • --loader=specifier — указать custom loader для ESM

Отладка

  • --inspect[=[host:]port] — включить инспектор (по умолчанию 127.0.0.1:9229)
  • --inspect-brk — пауза при старте
  • --trace-warnings — трассировка предупреждений
  • --trace-deprecation — трассировка устаревших API
  • --throw-deprecation — выбрасывать ошибки вместо предупреждений

Производительность

  • --max-old-space-size=size — лимит памяти в мегабайтах
  • --no-warnings — отключить все предупреждения
  • --experimental-modules — включить экспериментальные ESM-фичи (в новых версиях не требуется)
  • --conditions=condition — задать условия импорта (для package.json exports)

Переменные окружения

  • NODE_OPTIONS — передача флагов через переменную окружения
  • NODE_ENV — окружение (production, Разработка)
  • NODE_PATH — дополнительные пути для поиска модулей
  • UV_THREADPOOL_SIZE — размер пула потоков libuv (по умолчанию 4)

4. Структура проекта Node.js

Типичная структура проекта на Node.js включает следующие элементы:

my-node-app/
├── package.json
├── package-lock.json (или yarn.lock, pnpm-lock.yaml)
├── node_modules/
├── src/ # исходный код приложения
│ ├── index.js # точка входа
│ ├── routes/
│ ├── controllers/
│ ├── models/
│ ├── middleware/
│ └── utils/
├── public/ # статические файлы (если есть веб-интерфейс)
├── config/ # конфигурационные файлы
├── tests/ # тесты (unit, integration)
├── scripts/ # вспомогательные скрипты
├── .env # переменные окружения (не в репозитории)
├── .gitignore
├── README.md
└── LICENSE

Рекомендуется разделять логику по слоям — маршрутизация, контроллеры, бизнес-логика, доступ к данным, утилиты. Это упрощает поддержку, тестирование и масштабирование.


5. package.json — справочник

Файл package.json описывает проект, его зависимости, скрипты и метаданные.


Обязательные поля

  • "name" — имя пакета (должно быть уникальным в npm, без заглавных букв и спецсимволов кроме -, _)
  • "version" — версия в формате SemVer (MAJOR.MINOR.PATCH)

Основные поля

  • "description" — краткое описание
  • "main" — точка входа (по умолчанию index.js)
  • "type" — тип модулей: "commonjs" (по умолчанию) или "module" (включает ESM)
  • "exports" — тонкая настройка экспорта для разных условий (например, import, require, node, browser)
  • "scripts" — команды, запускаемые через npm run <script>
npm run <script>
  • "dependencies" — зависимости времени выполнения
  • "devDependencies" — зависимости только для разработки (тесты, сборка)
  • "peerDependencies" — зависимости, которые должны быть установлены в основном проекте (часто в библиотеках)
  • "engines" — требуемые версии Node.js и npm:
"engines": {
"node": ">=18.0.0",
"npm": ">=8.0.0"
}
  • "files" — список файлов, включаемых при публикации пакета
  • "keywords" — ключевые слова для поиска в npm
  • "author", "contributors", "license", "repository", "homepage"

Пример package.json

Код ITЗагрузка примера кода…


6. Управление зависимостями

Команды npm

  • npm init — создание package.json
  • npm install / npm i — установка всех зависимостей из package.json
  • npm install <package> — установка и добавление в dependencies
npm install <package>
  • npm install <package> --save-dev — установка в devDependencies
npm install <package> --save-dev
  • npm uninstall <package> — удаление пакета
npm uninstall <package>
  • npm update — обновление зависимостей в пределах версионных ограничений
  • npm outdated — показ устаревших пакетов
npm outdated
  • npm audit — проверка уязвимостей
  • npm audit fix — автоматическое исправление некоторых уязвимостей
npm audit fix

Версионные диапазоны

  • 1.2.3 — точная версия
  • ~1.2.3 — совместимость с патчами (>=1.2.3 <1.3.0)
  • ^1.2.3 — совместимость с минорными и патчами (>=1.2.3 <2.0.0)
  • * — любая версия (не рекомендуется)
  • latest — последняя опубликованная версия

Файлы блокировки

  • package-lock.json — фиксирует точные версии всех зависимостей (включая вложенные)
  • Обеспечивает воспроизводимую установку на всех машинах
  • Должен быть включён в систему контроля версий

7. Скрипты в package.json

Скрипты позволяют стандартизировать рабочие процессы.

Примеры:

"scripts": {
"start": "node server.js",
"dev": "NODE_ENV=Разработка nodemon server.js",
"test": "jest --coverage",
"test:watch": "jest --watch",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"format": "prettier --write .",
"build": "webpack --mode production",
"prepublishOnly": "npm test && npm run build"
}

Особые скрипты:

  • prepublishOnly — запускается перед публикацией
  • preinstall, postinstall — до и после установки
  • prestart, poststart — до и после npm start

Переменные окружения в скриптах:

  • Windows: set NODE_ENV=production && node app.js
  • Unix: NODE_ENV=production node app.js
  • Кроссплатформенно: использовать пакет cross-env

8. Обработка ошибок

Node.js использует несколько моделей обработки ошибок:


Callback-стиль

fs.readFile('file.txt', (err, data) => {
if (err) {
console.error('Ошибка чтения:', err.message);
return;
}
console.log(data.toString());
});

Промисы и async/await

try {
const data = await fs.promises.readFile('file.txt', 'utf8');
console.log(data);
} catch (err) {
console.error('Ошибка:', err.message);
}

Глобальные обработчики

process.on('uncaughtException', (err) => {
console.error('Необработанное исключение:', err);
process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
console.error('Необработанный промис:', reason);
process.exit(1);
});

Рекомендуется логировать ошибки, очищать ресурсы и завершать процесс в случае критических сбоев.


9. Безопасность

Основные практики

  • Регулярно обновлять зависимости (npm outdated, npm update)
npm outdated
  • Использовать npm audit и инструменты вроде snyk, dependabot
  • Не коммитить .env и другие секреты
  • Валидировать и санировать все входные данные
  • Использовать helmet в Express-приложениях
  • Ограничивать размеры запросов (body-parser с лимитами)
  • Отключать отладочные эндпоинты в продакшене
  • Использовать HTTPS в продакшене
  • Устанавливать минимально необходимые права для процесса

Защита от распространённых уязвимостей

  • Prototype Pollution — избегать небезопасного использования Object.assign, lodash.merge
  • Command Injection — не передавать пользовательский ввод напрямую в child_process.exec
  • Path Traversal — нормализовать пути и проверять, что они находятся внутри разрешённой директории:
const path = require('path');
const filePath = path.join(__dirname, 'public', userProvidedPath);
if (!filePath.startsWith(path.resolve(__dirname, 'public'))) {
throw new Error('Недопустимый путь');
}

10. CLI-инструменты и отладка

Полезные глобальные пакеты

  • nodemon — перезапуск приложения при изменении файлов
  • pm2 — продакшен-менеджер процессов
  • http-server — простой статический сервер
  • tsx / esbuild-runner — запуск TypeScript без предварительной компиляции

Встроенная отладка

  • Запуск с --inspect и подключение через Chrome DevTools (chrome://inspect)
  • Использование debugger; в коде
  • Точки останова в VS Code через launch-конфигурацию

Профилирование

  • --prof — генерация лога V8 profiler
  • --prof-process — анализ лога
  • Инструменты: Clinic.js, 0x, Chrome DevTools Performance tab

11. Практические шаблоны

Сервер на чистом Node.js

Код ITЗагрузка примера кода…


Чтение конфигурации

// config/index.js
const dotenv = require('dotenv');
dotenv.config();

module.exports = {
port: process.env.PORT || 3000,
dbUrl: process.env.DATABASE_URL,
jwtSecret: process.env.JWT_SECRET
};

Логирование

Использовать специализированные библиотеки — winston, pino, bunyan.
Пример с console (для простых случаев):

const log = (level, message) => {
console.log(`[${new Date().toISOString()}] [${level}] ${message}`);
};

12. Производительность

Основные принципы

  • Использовать неблокирующие операции
  • Избегать синхронных методов (fs.readFileSync, child_process.execSync) в продакшене
  • Минимизировать количество блокирующих вычислений в основном потоке
  • Использовать кэширование (в памяти, Redis, CDN)
  • Оптимизировать сериализацию/десериализацию JSON
  • Использовать стриминг для больших объёмов данных

Инструменты профилирования

  • clinic.js — автоматический анализ производительности
  • 0x — генерация flamegraph
  • Node.js built-in profiler — флаги --prof, --prof-process
  • Chrome DevTools — CPU profiling, memory snapshots
  • process.memoryUsage(), process.cpuUsage() — ручной мониторинг

Работа с памятью

  • Избегать утечек: не хранить ссылки на объекты дольше необходимого
  • Использовать WeakMap, WeakSet для кэшей
  • Ограничивать размеры коллекций
  • Периодически вызывать global.gc() (только при запуске с --expose-gc)

Масштабирование

  • Кластеризация: cluster модуль для использования всех ядер CPU
  • Микросервисы: разделение логики на независимые сервисы
  • Worker Threads: вынос тяжёлых вычислений в отдельные потоки
  • Очереди задач: Bull, Agenda — для отложенной обработки

13. Работа с базами данных

Node.js поддерживает широкий спектр СУБД через драйверы и ORM.


Реляционные базы

  • PostgreSQLpg (node-postgres), Sequelize, TypeORM, Prisma
  • MySQL/MariaDBmysql2, Sequelize, TypeORM
  • SQLite: better-sqlite3, sqlite3

Пример с pg:

const { Client } = require('pg');
const client = new Client({ connectionString: process.env.DATABASE_URL });
await client.connect();
const res = await client.query('SELECT * FROM users WHERE id = $1', [1]);
await client.end();

NoSQL

  • MongoDB: mongodb (официальный драйвер), Mongoose
  • Redisredis — для кэширования, очередей, сессий
  • CouchDB, DynamoDB, Firestore — через соответствующие SDK

Пулы соединений

Все современные драйверы поддерживают пул соединений. Это критически важно для производительности:

const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 20, // максимальное число соединений
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000
});

Миграции

  • Использовать инструменты — knex, sequelize-cli, Prisma Migrate
  • Версионировать схему БД вместе с кодом
  • Избегать прямого изменения схемы вручную

14. Тестирование

Уровни тестирования

  • Unit-тесты — проверка отдельных функций
  • Integration-тесты — взаимодействие модулей
  • E2E-тесты — сквозные сценарии

Фреймворки

  • Jest — всё в одном — runner, assertions, mocks, coverage
  • Mocha + Chai + Sinon — классический стек
  • Vitest — быстрый альтернативный runner (для ESM)
  • Supertest — тестирование HTTP-серверов

Пример unit-теста:

// math.js
exports.add = (a, b) => a + b;

// math.test.js
const { add } = require('./math');
test('adds 1 + 2 to equal 3', () => {
expect(add(1, 2)).toBe(3);
});

Пример integration-теста:

const request = require('supertest');
const app = require('./app');

test('GET /users returns 200', async () => {
const res = await request(app).get('/users');
expect(res.statusCode).toBe(200);
expect(Array.isArray(res.body)).toBe(true);
});

Покрытие кода

  • jest --coverage — генерация отчёта
  • Целевой уровень покрытия: 70–90% для критических модулей

CI/CD

  • Запуск тестов при каждом push в репозиторий
  • Блокировка мержа при падении тестов
  • Использование GitHub Actions, GitLab CI, CircleCI

15. Деплой и эксплуатация

Варианты развёртывания

  • Собственный сервер (VPS): Ubuntu + Nginx + PM2
  • PaaS — Heroku, Render, Railway, Vercel (для serverless)
  • Контейнеризация: Docker + Kubernetes
  • Serverless: AWS Lambda, Cloudflare Workers (ограниченная совместимость)

Dockerfile пример

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "src/index.js"]

PM2 (Process Manager)

npm install -g pm2
pm2 start src/index.js --name "my-app"
pm2 startup # автозапуск при старте системы
pm2 save # сохранить список процессов
pm2 logs my-app # просмотр логов

Обратный прокси

Nginx перед Node.js:

server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}

Переменные окружения

  • Все конфигурационные параметры — через .env или переменные окружения
  • Никаких "магических" значений в коде
  • Использовать dotenv только в разработке

16. Мониторинг и логирование

Логирование

  • Структурированные логи в формате JSON
  • Уровни — debug, info, warn, error
  • Библиотеки — pino, winston, bunyan
  • Отправка логов в централизованные системы — ELK, Datadog, Sentry

Метрики

  • Количество запросов в секунду
  • Время ответа (p50, p95, p99)
  • Использование памяти и CPU
  • Количество активных соединений

Алертинг

  • Настройка оповещений при превышении порогов
  • Интеграция с Slack, Telegram, Email

Инструменты

  • Prometheus + Grafana — сбор и визуализация метрик
  • New Relic, Datadog — коммерческие APM-системы
  • Sentry — отслеживание ошибок

17. Сравнение с другими средами выполнения

Node.js и Deno

  • Deno — безопаснее по умолчанию (требует явных разрешений)
  • Поддержка TypeScript "из коробки"
  • Единый исполняемый файл
  • Модули по URL, без package.json
  • Меньше зрелых библиотек

Node.js и Bun

  • Bun — написан на Zig, значительно быстрее в запуске и установке
  • Совместим с большинством npm-пакетов
  • Встроенный bundler, тест-раннер, transpiler
  • Ещё не стабилен для продакшена (на начало 2026 года)

Node.js и Python (FastAPI/Django)

  • Node.js лучше для I/O-интенсивных задач (чаты, реалтайм)
  • Python предпочтителен для CPU-интенсивных задач (ML, Data Science)

Node.js и Go

  • Go — компилируемый язык, выше производительность и потребление памяти
  • Node.js — быстрее в разработке, богаче экосистема для веба

Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.


В подборках

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

СправочникиСправочник по JavaScript, Справочник по React, Справочник-шпаргалка по Git, Справочник по Vue.js, Справочник по CSS, Справочник по Angular.