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

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

Иллюстрация к уроку

Node.js — это среда выполнения JavaScript вне браузера, построенная на движке V8 (Chrome). Node.js позволяет запускать JavaScript на сервере, обращаться к файловой системе, сети и операционной системе.

Создан Райаном Далем (Ryan Dahl) в 2009 году. Сегодня используется в крупнейших компаниях мира.

Браузер Сервер (Node.js)
───────────────────────── ─────────────────────────
JavaScript ✅ JavaScript ✅
DOM API ✅ DOM ❌ (не нужен)
window, document ✅ process, fs, net ✅
Файловая система ❌ Файловая система ✅
Прямой доступ к БД ❌ Прямой доступ к БД ✅

Один язык на всём стеке — это и есть главное преимущество.

Node.js работает асинхронно через Event Loop. Это позволяет обрабатывать тысячи запросов одновременно без создания отдельного потока для каждого.

Запрос пришёл
Event Loop (один поток)
Запустил I/O операцию (файл, БД)
Пока I/O работает → обрабатываем другие запросы
I/O готов → callback/promise → возвращаем ответ

Сравнение с традиционными серверами (Apache, Java):

Node.js: Традиционный:
1 поток 1 поток = 1 запрос
Event Loop Thread Pool
Async I/O Sync I/O (блокирует)
~50 МБ RAM ~100+ МБ RAM на поток
Окно терминала
# Установка nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Установка Node.js LTS
nvm install --lts
nvm use --lts
# Проверка
node --version # v20.x.x
npm --version # 10.x.x

Скачай с nodejs.org — выбирай LTS версию.

hello.js
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/project
Окно терминала
node # запускаем REPL
> 2 + 2
4
> 'Привет'.toUpperCase()
'ПРИВЕТ'
> const arr = [1, 2, 3]
> arr.map(x => x * 2)
[2, 4, 6]
> .exit # выход
// process — информация о процессе
console.log(process.version); // версия Node
console.log(process.env.HOME); // переменные окружения
console.log(process.argv); // аргументы командной строки
console.log(process.cwd()); // текущая директория
process.exit(0); // завершить процесс
// __dirname и __filename (CommonJS)
console.log(__dirname); // /home/user/project
console.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()); // Привет
const fs = require('fs');
// ❌ Синхронный — блокирует Event Loop
const 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();
my-project/
├── src/
│ ├── index.js # Точка входа
│ ├── routes/ # Роуты API
│ ├── controllers/ # Логика обработчиков
│ ├── middleware/ # Промежуточные функции
│ ├── models/ # Модели данных
│ └── utils/ # Вспомогательные функции
├── tests/ # Тесты
├── .env # Переменные окружения
├── .gitignore
└── package.json
Окно терминала
# Инициализация проекта
npm init -y
# Установка пакета
npm install express
# Установка dev-зависимости
npm install --save-dev nodemon
# Запуск скриптов
npm start
npm run dev
npm test
  1. Установи Node.js через nvm, проверь версию
  2. Создай файл info.js, который выводит: версию Node, платформу, текущую директорию
  3. Запусти REPL и вычисли несколько выражений
  4. Создай package.json командой npm init -y
  5. Добавь скрипт "start": "node src/index.js" в package.json
  • Node.js = V8 движок + API для работы с системой
  • Event Loop позволяет обрабатывать много запросов одним потоком
  • npm — крупнейший реестр пакетов в мире (2+ млн пакетов)
  • Всегда используй async/await вместо callback-hell
  • LTS версия — самый стабильный выбор для production