EMZETT.
Войти

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