Express і Node: вебсервери та API на JavaScript
Коротко: Express — компактний вебфреймворк для Node.js: маршрути відповідають на HTTP-запити, проміжне ПЗ (middleware) обробляє запити крок за кроком (журналювання, JSON, автентифікація, помилки).
Докладніше: З Node.js JavaScript працює на сервері. Express (з 2010 року) — класика для API та вебсторінок; сучасні альтернативи: Fastify, Hono, NestJS, обробники маршрутів Next.js.
Подробиці
Перший API
import express from 'express';
const app = express();
app.use(express.json()); // читати тіло JSON
const games = [{ id: 1, title: 'Zelda' }];
app.get('/api/games', (req, res) => res.json(games));
app.get('/api/games/:id', (req, res) => {
const g = games.find(x => x.id === Number(req.params.id));
if (!g) return res.status(404).json({ error: 'not found' });
res.json(g);
});
app.post('/api/games', (req, res) => {
const { title } = req.body;
if (typeof title !== 'string' || !title.trim()) return res.status(400).json({ error: 'title missing' });
const created = { id: games.length + 1, title: title.trim() };
games.push(created);
res.status(201).json(created);
});
app.listen(3000, () => console.log('running on :3000'));Запуск: node server.js ("type": "module" у package.json). Express 5 підтримує асинхронні обробники з автоматичною передачею помилок.
Middleware та помилки
Middleware — функції (req, res, next) у ланцюжку: порядок важливий.
app.use((req, res, next) => { console.log(req.method, req.url); next(); });
app.use('/api', authCheck); // лише для /api
app.use((err, req, res, next) => { // middleware помилок (4 параметри)
console.error(err);
res.status(500).json({ error: 'Server error' });
});Перевірені пакети: helmet (заголовки безпеки), cors, express-rate-limit, morgan/pino (журналювання), zod (валідація), cookie-parser/express-session, multer (завантаження).
Структура та база даних
- Router (
express.Router()) на ресурс, розділення контролер/сервіс/репозиторій. - База даних:
pg/Drizzle/Prisma/Sequelize; параметризовані запити. - Конфігурація:
process.env(dotenv), жодних секретів у коді. - Async/await + централізована обробка помилок; не залишайте promise необробленими.
- Тести:
supertest+ Jest/Vitest/node:test. - Експлуатація:
NODE_ENV=production, менеджер процесів (pm2) або Docker, зворотний проксі (Nginx) + HTTPS, перевірка стану, журнали. - Коректне завершення (SIGTERM).
Безпека та класифікація
- Перевіряйте ввід (тип, довжина), жодного
eval, впровадження NoSQL/SQL, XSS (не виводьте сирий HTML), CSRF за автентифікації через cookie, CORS — свідомо, обмеження частоти запитів, перевірка залежностей (npm audit). - Обмежуйте розмір тіла (
express.json({ limit: '100kb' })). - Не надсилайте клієнтам помилки з трасуванням стеку.
- Порівняння: Express = мінімально/багато свободи; Fastify швидший + схеми; NestJS структурований (TypeScript, DI, стиль Angular); Next.js об’єднує фронтенд + API.
- Шлях навчання: основи Node → HTTP/REST → Express → база даних → автентифікація → тести → розгортання.
Див. також: Node.js, Проєктування REST API, Обмеження частоти запитів