JavaScript поза браузером! Створюй сервери, API, CLI-інструменти та повноцінні застосунки
📚 Урок 4 • Backend • 20 хв читанняNode.js — це середовище виконання JavaScript поза браузером. Якщо раніше JavaScript працював тільки у браузері, то з Node.js ти можеш запускати JS на сервері, комп'ютері, навіть на роботах!
Уяви: JavaScript — це водій, браузер — це автомобіль. Раніше водій міг їздити тільки на авто. Node.js — це літак, поїзд, корабель для того ж водія! Тепер JavaScript може працювати будь-де! ✈️🚂🚢
Ryan Dahl створив Node.js у 2009 році. Він взяв движок V8 від Google Chrome (той самий, що виконує JS у браузері) і зробив його самостійним. Тепер JavaScript — одна з найпопулярніших мов для бекенду!
REST API, GraphQL, повноцінні веб-застосунки з Express, Fastify, Nest.js
Чати, онлайн-ігри, колаборативні редактори з Socket.io, WebSockets
Консольні програми як npm, create-react-app, eslint
VS Code, Slack, Discord — створені з Electron (Node.js + Chromium)
Telegram боти, Discord боти, автоматизація
Легкі, швидкі сервіси для великих архітектур
Стрімінг для 200+ млн користувачів
Платіжна система, 2x швидше на Node
Мільйони запитів на хвилину
Перейшли з Ruby, 10x менше серверів
Встановити Node.js дуже просто! Разом з ним автоматично встановиться npm (Node Package Manager) — менеджер пакетів.
Можливо, Node.js вже встановлено! Відкрий термінал та введи node --version. Якщо бачиш версію (наприклад, v20.10.0) — все готово!
Відкрий nodejs.org
Вибери LTS (Long Term Support) — стабільна версія. Current — для експериментів
Відкрий .msi файл та слідуй інструкціям. Залиш всі галочки за замовчуванням!
Щоб VS Code побачив Node.js, перезапусти редактор
Відкрий новий термінал та введи: node --version і npm --version
# Варіант 1: Homebrew (рекомендовано) brew install node # Варіант 2: Завантажити з nodejs.org # Відкрий .pkg файл та встанови # Перевірка node --version && npm --version
# Встановлення через NodeSource (рекомендовано) curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs # Або через snap sudo snap install node --classic # Перевірка node --version npm --version
LTS (Long Term Support) — стабільна версія, рекомендована для продакшену та навчання. Current — найновіша з останніми фічами, але може бути нестабільною. Для початку бери LTS!
npm (Node Package Manager) — це інструмент для встановлення бібліотек та управління залежностями. Це як App Store для JavaScript!
npm — це магазин з мільйонами безкоштовних "деталей" для твого проєкту! Потрібен сервер? npm install express. Робота з датами? npm install dayjs. Не треба писати все з нуля!
Пакетів у реєстрі npm
Завантажень на тиждень
Розробників використовують npm
Найбільший реєстр пакетів у світі
# Ініціалізація проєкту (створює package.json) npm init # з питаннями npm init -y # швидко, без питань # Встановлення пакетів npm install express # або скорочено: npm i express npm i lodash axios # кілька пакетів одразу # Встановлення dev-залежностей (тільки для розробки) npm i nodemon -D # або --save-dev # Глобальне встановлення (доступно звідусіль) npm i -g typescript # встановить глобально # Видалення пакетів npm uninstall express # або npm remove, npm rm # Встановити всі залежності з package.json npm install # або просто npm i
Це файл з інформацією про проєкт та його залежності. Створюється командою npm init:
{
"name": "my-awesome-project",
"version": "1.0.0",
"description": "Мій перший Node.js проєкт",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}Коли встановлюєш пакети, вони зберігаються у папці node_modules. Ця папка може бути ДУЖЕ великою!
Додай node_modules/ до .gitignore! Ця папка може важити сотні мегабайт. Інші розробники просто запустять npm install і отримають всі пакети.
Секція "scripts" у package.json дозволяє створювати власні команди:
# Запуск скриптів npm start # запустить "start" скрипт npm run dev # запустить "dev" скрипт npm test # запустить "test" скрипт npm run build # запустить "build" скрипт # start, test, stop — можна без "run" # всі інші — потребують "npm run назва"
VS Code має чудову підтримку Node.js з коробки, але кілька розширень зроблять твою роботу ще приємнішою!
Знаходить помилки та проблеми стилю в коді у реальному часі
Автоматичне форматування коду — завжди охайний код!
Автодоповнення імен npm пакетів при імпорті
Автодоповнення шляхів до файлів
Тестування API прямо у VS Code
Показує помилки прямо біля рядка коду
Додай у settings.json (Ctrl+Shift+P → "Preferences: Open Settings (JSON)"):
{
// Форматування при збереженні
"editor.formatOnSave": true,
// Prettier як форматувальник
"editor.defaultFormatter": "esbenp.prettier-vscode",
// ESLint виправляє при збереженні
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}Час написати код! Почнемо з простого, а потім створимо справжній веб-сервер!
# Створи папку та перейди в неї mkdir my-node-app cd my-node-app # Ініціалізуй npm проєкт npm init -y # Відкрий у VS Code code .
Створи файл index.js:
// 🦉 Мій перший Node.js скрипт! console.log("💚 Привіт від Node.js!"); console.log(`Версія Node: ${process.version}`); console.log(`Платформа: ${process.platform}`); // Змінні оточення console.log(`Користувач: ${process.env.USERNAME || process.env.USER}`); // Поточна директорія console.log(`Директорія: ${process.cwd()}`);
Ти запустив свій перший Node.js скрипт! Зверни увагу — process — це глобальний об'єкт Node.js з інформацією про систему!
Тепер найцікавіше — створимо справжній веб-сервер!
Node.js має вбудований модуль для створення серверів:
// Імпортуємо вбудований модуль http const http = require('http'); // Створюємо сервер const server = http.createServer((req, res) => { // Встановлюємо заголовки res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); // Відправляємо відповідь res.end('<h1>🦉 Привіт від Node.js!</h1><p>Мій перший сервер працює!</p>'); }); // Запускаємо сервер на порті 3000 const PORT = 3000; server.listen(PORT, () => { console.log(`🚀 Сервер запущено: http://localhost:${PORT}`); });
Тепер відкрий браузер та перейди на http://localhost:3000 — ти побачиш свою сторінку!
Express — найпопулярніший фреймворк для Node.js. Він спрощує створення серверів!
# Встанови Express npm install express
// Імпортуємо Express const express = require('express'); const app = express(); const PORT = 3000; // Головна сторінка app.get('/', (req, res) => { res.send(` <h1>🦉 Вітаю на моєму сервері!</h1> <p>Це Express.js — швидко та просто!</p> <ul> <li><a href="/about">Про мене</a></li> <li><a href="/api/users">API користувачів</a></li> </ul> `); }); // Сторінка "Про мене" app.get('/about', (req, res) => { res.send('<h1>👋 Я вивчаю Node.js на Koodi!</h1>'); }); // API endpoint — повертає JSON app.get('/api/users', (req, res) => { const users = [ { id: 1, name: 'Кудик', role: 'Mascot' }, { id: 2, name: 'Студент', role: 'Learner' } ]; res.json(users); }); // Запуск сервера app.listen(PORT, () => { console.log(`🚀 Express сервер: http://localhost:${PORT}`); });
app.get('/', ...) — обробляє GET запити на шлях '/'. res.send() — відправляє HTML. res.json() — відправляє JSON для API. Просто!
Набридло перезапускати сервер після кожної зміни? Nodemon робить це автоматично!
# Встанови nodemon як dev-залежність npm install nodemon --save-dev # Запусти через nodemon npx nodemon app.js
Додай скрипт у package.json:
{
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js"
}
}Тепер просто запускай npm run dev — сервер буде перезапускатися автоматично! 🎉
Node.js може читати та писати файли — те, що браузерний JS не вміє!
// Імпортуємо модуль fs (file system) const fs = require('fs'); // 📝 Запис у файл fs.writeFileSync('hello.txt', 'Привіт від Node.js! 🦉'); console.log('✅ Файл створено!'); // 📖 Читання файлу const content = fs.readFileSync('hello.txt', 'utf-8'); console.log('📄 Вміст файлу:', content); // 📂 Читання директорії const files = fs.readdirSync('.'); console.log('📁 Файли в папці:', files); // ➕ Додавання до файлу fs.appendFileSync('hello.txt', '\nДодатковий рядок!'); // 🗑️ Видалення файлу // fs.unlinkSync('hello.txt'); // ❓ Перевірка чи існує файл if (fs.existsSync('hello.txt')) { console.log('✅ Файл існує!'); }
readFileSync — синхронне (блокує код). readFile — асинхронне (не блокує). Для продакшену завжди використовуй асинхронні методи або fs.promises!
Ось must-have пакети, які використовує кожен Node.js розробник:
Мінімалістичний веб-фреймворк. Основа більшості Node.js серверів
Автоперезапуск сервера при змінах. Must-have для розробки
Завантаження змінних оточення з .env файлу. Для секретів!
HTTP клієнт для запитів до API. Краще за вбудований fetch
ODM для MongoDB. Спрощує роботу з базою даних
JWT токени для автентифікації користувачів
Валідація даних. Перевіряй вхідні дані!
Логування. Записуй логи у файли та консоль
Створюй API з Express: CRUD операції, middleware, роутинг
MongoDB, PostgreSQL, MySQL — зберігай дані
JWT, sessions, OAuth — захищай додатки
Real-time комунікація: чати, нотифікації
Jest, Mocha — пиши тести для свого коду
Heroku, Vercel, Railway — запускай у продакшен