1. Введение в Node.js

Что такое Node.js?
Заголовок раздела «Что такое Node.js?»Node.js — это среда выполнения JavaScript вне браузера, построенная на движке V8 (Chrome). Node.js позволяет запускать JavaScript на сервере, обращаться к файловой системе, сети и операционной системе.
Создан Райаном Далем (Ryan Dahl) в 2009 году. Сегодня используется в крупнейших компаниях мира.
Почему Node.js популярен?
Заголовок раздела «Почему Node.js популярен?»Браузер Сервер (Node.js)───────────────────────── ─────────────────────────JavaScript ✅ JavaScript ✅DOM API ✅ DOM ❌ (не нужен)window, document ✅ process, fs, net ✅Файловая система ❌ Файловая система ✅Прямой доступ к БД ❌ Прямой доступ к БД ✅Один язык на всём стеке — это и есть главное преимущество.
Event Loop — сердце Node.js
Заголовок раздела «Event Loop — сердце Node.js»Node.js работает асинхронно через Event Loop. Это позволяет обрабатывать тысячи запросов одновременно без создания отдельного потока для каждого.
Запрос пришёл ↓Event Loop (один поток) ↓Запустил I/O операцию (файл, БД) ↓Пока I/O работает → обрабатываем другие запросы ↓I/O готов → callback/promise → возвращаем ответСравнение с традиционными серверами (Apache, Java):
Node.js: Традиционный:1 поток 1 поток = 1 запросEvent Loop Thread PoolAsync I/O Sync I/O (блокирует)~50 МБ RAM ~100+ МБ RAM на потокУстановка Node.js
Заголовок раздела «Установка Node.js»Через nvm (рекомендуется)
Заголовок раздела «Через nvm (рекомендуется)»# Установка nvmcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Установка Node.js LTSnvm install --ltsnvm use --lts
# Проверкаnode --version # v20.x.xnpm --version # 10.x.xПрямая установка
Заголовок раздела «Прямая установка»Скачай с nodejs.org — выбирай LTS версию.
Первый скрипт
Заголовок раздела «Первый скрипт»console.log('Привет от Node.js!');console.log('Версия Node:', process.version);console.log('Платформа:', process.platform);console.log('Папка:', process.cwd());node hello.js# Привет от Node.js!# Версия Node: v20.11.0# Платформа: linux# Папка: /home/user/projectREPL — интерактивный режим
Заголовок раздела «REPL — интерактивный режим»node # запускаем REPL
> 2 + 24> 'Привет'.toUpperCase()'ПРИВЕТ'> const arr = [1, 2, 3]> arr.map(x => x * 2)[2, 4, 6]> .exit # выходБазовые глобальные объекты
Заголовок раздела «Базовые глобальные объекты»// process — информация о процессеconsole.log(process.version); // версия Nodeconsole.log(process.env.HOME); // переменные окруженияconsole.log(process.argv); // аргументы командной строкиconsole.log(process.cwd()); // текущая директорияprocess.exit(0); // завершить процесс
// __dirname и __filename (CommonJS)console.log(__dirname); // /home/user/projectconsole.log(__filename); // /home/user/project/script.js
// setTimeout, setInterval — как в браузереsetTimeout(() => console.log('через 1 сек'), 1000);
// Buffer — для работы с бинарными даннымиconst buf = Buffer.from('Привет');console.log(buf); // <Buffer d0 ...>console.log(buf.toString()); // ПриветСинхронный vs Асинхронный код
Заголовок раздела «Синхронный vs Асинхронный код»const fs = require('fs');
// ❌ Синхронный — блокирует Event Loopconst data = fs.readFileSync('file.txt', 'utf8');console.log(data);
// ✅ Асинхронный — не блокируетfs.readFile('file.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data);});
// ✅✅ Через Promise/async-await (современный стиль)const { readFile } = require('fs/promises');
async function main() { const data = await readFile('file.txt', 'utf8'); console.log(data);}main();Структура Node.js проекта
Заголовок раздела «Структура Node.js проекта»my-project/├── src/│ ├── index.js # Точка входа│ ├── routes/ # Роуты API│ ├── controllers/ # Логика обработчиков│ ├── middleware/ # Промежуточные функции│ ├── models/ # Модели данных│ └── utils/ # Вспомогательные функции├── tests/ # Тесты├── .env # Переменные окружения├── .gitignore└── package.jsonnpm — менеджер пакетов
Заголовок раздела «npm — менеджер пакетов»# Инициализация проектаnpm init -y
# Установка пакетаnpm install express
# Установка dev-зависимостиnpm install --save-dev nodemon
# Запуск скриптовnpm startnpm run devnpm testПрактика
Заголовок раздела «Практика»- Установи Node.js через nvm, проверь версию
- Создай файл
info.js, который выводит: версию Node, платформу, текущую директорию - Запусти REPL и вычисли несколько выражений
- Создай
package.jsonкомандойnpm init -y - Добавь скрипт
"start": "node src/index.js"в package.json
Ключевые моменты
Заголовок раздела «Ключевые моменты»- Node.js = V8 движок + API для работы с системой
- Event Loop позволяет обрабатывать много запросов одним потоком
- npm — крупнейший реестр пакетов в мире (2+ млн пакетов)
- Всегда используй async/await вместо callback-hell
- LTS версия — самый стабильный выбор для production