Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Node.js: что это, где применяется и как освоить

Node.js — среда, в которой JavaScript выполняется вне браузера: на вашем компьютере, на сервере, в конвейере сборки. Язык тот же, но у программы появляются файлы, процессы и сетевые подключения, поэтому на Node.js пишут API для сайта, скрипты выгрузки данных, автотесты и служебные утилиты. Фронтендер с его помощью делает собственный сервер, тестировщик запускает автотесты, аналитик забирает данные из API в CSV. Для этого нужно освоить модули, npm, асинхронный код, работу с файлами и HTTP, встроенные тесты и выбор поддерживаемой версии.

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Иллюстрация к статье: Node.js: что это, где применяется и как освоить

Частая ошибка новичка — считать Node.js отдельным языком или фреймворком, который надо учить с нуля. На деле вы переносите знакомый JavaScript в новое окружение и учите то, чего в браузере не было: модуль node:fs для файлов, переменные окружения для паролей и ключей, запуск из командной строки, пакеты из npm. Поэтому первый полезный скрипт даётся быстро, а трудности начинаются позже: асинхронный код, сотни зависимостей, безопасность.

Что меняется, когда код выходит из браузера

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

Второе отличие — версию Node.js выбираете вы сами. На странице выпусков Node.js прямо сказано, что в рабочих системах стоит использовать только выпуски со статусом Active LTS или Maintenance LTS. На конец сентября 2026 года это линии 24 и 22, а 26-я пока имеет статус Current. От линии зависит, какие флаги вам доступны, и в примере ниже это окажется важным.

Кому и для чего нужен навык

Фронтенд-разработчику Node.js нужен дважды. Сборщики, линтеры и dev-сервер уже работают на нём, и понимание package.json избавляет от гаданий, почему проект не собирается. А ещё это собственный сервер: API для формы заявки, прослойка к чужому сервису, заглушка с тестовыми данными, пока бэкенд не готов. Профессиональная разработка серверов — тема статей о профессиях бэкенд- и фулстек-разработчика; здесь речь о серверной части своих задач.

Тестировщику-автоматизатору Node.js нужен как среда для инструментов: Playwright, Cypress и Jest ставятся через npm и запускаются из него. Кроме того, в Node.js есть встроенный модуль node:test: по документации он стабилен с версии 20, находит файлы вида *.test.mjs, умеет подменять функции и таймеры. Для проверки небольших скриптов отдельная библиотека не нужна.

Аналитику и маркетологу Node.js полезен для автоматизации: забрать данные из API рекламного кабинета или CRM, склеить несколько выгрузок, отправить отчёт в мессенджер по расписанию. DevOps-инженеру он встречается в скриптах конвейера и в контейнерах, где нужно выбрать образ с поддерживаемой линией.

Учебный пример: ежедневная выгрузка заявок в CSV

Ситуация учебная. Аналитику нужен каждое утро файл с заявками из CRM, у которой есть HTTP API. Он кладёт в папку /home/anna/leads/ три файла: .env с адресом API и токеном, модуль для строк CSV и сам скрипт. Сначала функция, которую удобно проверить отдельно:

// csv.mjs
export function toCsvRow(values) {
  return values.map((v) => {
    const s = String(v ?? '');
    return /[",\n]/.test(s) ? `"${s.replaceAll('"', '""')}"` : s;
  }).join(',');
}

Затем скрипт: встроенный fetch забирает заявки, а writeFile сохраняет результат в подпапку out.

// export.mjs
import { writeFile } from 'node:fs/promises';
import { toCsvRow } from './csv.mjs';

const res = await fetch(process.env.API_URL, {
  headers: { Authorization: `Bearer ${process.env.API_TOKEN}` },
});
if (!res.ok) throw new Error(`API ответил ${res.status}`);
const leads = await res.json();
const rows = leads.map((l) => toCsvRow([l.id, l.created_at, l.source, l.amount]));
await writeFile('/home/anna/leads/out/leads.csv',
  ['id,created_at,source,amount', ...rows].join('\n'));

Самое хрупкое место — экранирование: название компании с запятой сдвинет столбцы в Excel. Поэтому рядом лежит тест для команды node --test:

// csv.test.mjs
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { toCsvRow } from './csv.mjs';

test('поле с запятой и кавычками экранируется', () => {
  assert.equal(toCsvRow(['ООО "Ромашка", Москва', 5]),
    '"ООО ""Ромашка"", Москва",5');
});

Как ограничить скрипт и где у ограничения граница

Скрипту выгрузки не нужно видеть весь диск, и Node.js позволяет это закрепить. Модель разрешений включают флагом --permission; по описанию флага она стабильна с версий 23.5.0 и 22.13.0. После этого процессу запрещено всё, что не разрешено явно:

node --env-file=.env --permission --allow-fs-read=/home/anna/leads/ --allow-fs-write=/home/anna/leads/out/ export.mjs

Если забыть --allow-fs-read, Node.js не прочитает даже сам файл скрипта и остановится с ошибкой ERR_ACCESS_DENIED: такой пример приведён в документации к модели разрешений.

А теперь деталь, которую легко пропустить. В документации линии 24, как и 22, перечислено, что именно ограничивает --permission: файловую систему через модуль fs, запуск процессов, node:worker_threads, нативные дополнения, WASI и инспектор. Сети в этом списке нет. Флаг --allow-net появился только в версии 25.0.0 и до сих пор помечен как находящийся в активной разработке, а 25-я линия уже снята с поддержки. Значит, на LTS-версии, которую вы ставите для рабочих задач, скрипт с --permission по-прежнему может отправить данные на любой адрес.

Там же есть ещё две оговорки. Модель разрешений описана как «ремень безопасности» от случайных действий доверенного кода, а вредоносный код может её обойти. И символические ссылки ведут за пределы разрешённой папки. Вывод: --permission спасает от собственных ошибок вроде неверного пути в writeFile, но не заменяет проверку пакетов и отдельную учётную запись для скрипта.

Порядок освоения

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

  1. Установка LTS-версии через менеджер версий (nvm, fnm или Volta) и запуск скрипта из терминала.
  2. Модули import и export, package.json, установка пакетов и файл блокировки версий.
  3. Промисы и async/await: ожидание, обработка ошибок, параллельные запросы.
  4. Файлы и переменные окружения: чтение, запись, пути, секреты вне кода.
  5. HTTP: fetch для чужих API, затем свой небольшой сервер на Express или Fastify.
  6. Тесты на node:test, модель разрешений и выбор версии для рабочей системы.

Если хочется пройти этот путь с разбором кода от наставника, онлайн-курс «Node.js-разработчик» от Хекслета начинается с основ JavaScript и командной строки, затем переходит к Node.js и асинхронности, базам данных и фреймворку Fastify. На нём четыре проекта с ревью, включая загрузчик страниц для асинхронной работы с HTTP и менеджер задач на Fastify с PostgreSQL. Рассчитан он на 8–10 месяцев по 12–15 часов в неделю — это полная программа, а не точечная задача.

Упражнения и типичные ошибки

Хорошая тренировка — переписать пример под свою задачу: добавить постраничную загрузку, повтор запроса при ответе 429 или 503, журнал в отдельном файле. Каждое изменение закрепляйте тестом и запускайте скрипт с --permission, расширяя права по одному флагу: так видно, что на самом деле нужно программе.

Новички чаще всего спотыкаются о забытый await: запрос уходит, а скрипт уже пишет пустой файл. Вторая ошибка — токен прямо в коде, который потом попадает в репозиторий. Третья — пакет ради одной функции: с ним приходят десятки зависимостей с правами вашего процесса. Проверка: удалите папку node_modules, поставьте зависимости заново командой npm ci и запустите тесты. Если что-то сломалось, проект зависел от случайного состояния вашего компьютера.

Как выбрать обучение

Фронтендеру, который уверенно пишет на JavaScript и TypeScript, основы языка заново не нужны. Например, курс «Бэкенд на Node.js для фронтенд-разработчиков» от Яндекс Практикума длится три месяца и прямо рассчитан на тех, кто знает JavaScript, TypeScript и Git. Два проекта строятся на Express с MongoDB и на Nest.js с PostgreSQL, отдельно разбирают тесты, развёртывание на сервере и Docker. Помощи с трудоустройством на курсе нет.

Перед оплатой сверьте программу со своими задачами. Тестировщику важны асинхронность, npm и тесты, аналитику — файлы и API, фронтендеру — маршруты, авторизация и база данных. Посмотрите, проверяет ли домашние задания живой человек.

Второй вариант для тех, кто пришёл из фронтенда, — программа «Backend-разработка на Node.js» от Нетологии на шесть месяцев. Это не программирование с нуля: от слушателя ждут знания замыканий, прототипов, цикла событий и промисов. Практики 184 часа против 40 часов теории, а сквозной проект библиотеки постепенно обрастает Express, авторизацией, TypeScript, тестами на Jest и Docker. Из баз данных здесь только MongoDB, а домашние задания, по данным обзора, преподаватель не проверяет — реляционные базы и ревью кода придётся добирать отдельно.

Как навык влияет на доход

Для аналитика, маркетолога или тестировщика ручного профиля Node.js редко становится отдельной строкой в зарплате. Он меняет круг задач: вы сами автоматизируете выгрузки, пишете автотесты, не ждёте разработчика ради небольшого сервиса. Заметнее всего это у тестировщиков: автоматизацию на JavaScript и TypeScript в вакансиях выделяют отдельно от ручного тестирования.

У фронтендера Node.js открывает путь к фулстек-задачам и бэкенду, то есть к другим вакансиям с другой вилкой. Сравнивать их стоит самому. На hh.ru задайте ключевой навык Node.js, город и опыт; в калькуляторе зарплат Хабр Карьеры выберите навык и квалификацию. Смотрите на медиану, а не на среднее, и проверяйте, указана сумма до вычета налога или на руки. Предложения в вакансиях и зарплаты из анкет — разные данные, не смешивайте их.

Когда Node.js не нужен

Если задача — разовая сводка из таблицы, быстрее справятся формулы или Python с pandas. Для тяжёлых вычислений Node.js тоже не лучший выбор: основной поток у него один, и долгий расчёт задерживает всё остальное. Зато он удобен там, где много сетевых запросов и общий код с фронтендом. Если вы можете написать скрипт из примера, покрыть его тестом и объяснить, какие флаги разрешений ему нужны и почему сеть на LTS-версии остаётся открытой, основы уже есть.

Следующий шаг — небольшой собственный сервер или программа с ревью кода. Сравнить варианты удобно в рейтинге онлайн-школ с обучением Node.js: там собраны курсы и для начинающих, и для фронтендеров, которые осваивают сервер.