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, Ограничение частоты запросов