Middleware
Тема дорожной карты · Node.js
Middleware в Express.js — это функции, имеющие доступ к объекту запроса (req), объекту ответа (res) и функции next, образующие конвейер, через который проходит каждый входящий HTTP-запрос перед попаданием к конечному обработчику маршрута. Middleware-функции Express.js регистрируются с помощью app.use() и могут быть уровня приложения, уровня роутера, для обработки ошибок или сторонними npm-пакетами — примеры включают helmet для заголовков безопасности, cors для кросс-доменных запросов, express.json() для парсинга тела запроса, а также morgan или pino-http для логирования запросов. Порядок регистрации middleware в Express.js определяет порядок выполнения, поэтому важно размещать middleware аутентификации и валидации перед обработчиками маршрутов, которые они защищают. Middleware для обработки ошибок имеет специальную сигнатуру с четырьмя аргументами (err, req, res, next) и должно регистрироваться последним в цепочке middleware Express.js для перехвата ошибок, переданных через next(err). Написание переиспользуемого, компонуемого middleware является краеугольным камнем масштабируемого проектирования серверных API на Node.js с использованием Express.js.
Как это работает
Middleware — самый широко используемый Node HTTP-фреймворк: минималистичный, middleware-based, route-based. Запрос проходит через стек middleware-функций; каждая зовёт next() для передачи управления. app.get("/path", handler) регистрирует роут; app.use(middleware) монтирует middleware. Современные альтернативы: Fastify (быстрее, schema-based, JSON-first), Koa (духовный преемник Express, async-native), Hono (edge-runtime ready), NestJS (opinionated, decorator-based).
Когда применять
Express — для legacy-сервисов и быстрых прототипов; его доки и middleware-экосистема непревзойдены. Fastify — для новых performance-чувствительных API (2-3x throughput, встроенная schema-валидация). NestJS — для больших командных проектов с пользой от конвенций. Всегда добавляйте helmet, rate-limit, лимит размера body — у Express нет безопасных дефолтов. Валидируйте input (zod, ajv) до любой записи в БД.
Типичные ошибки
Ловушки Middleware: забытый response — запрос висит вечно (ставьте timeouts); express.json({limit: "100mb"}) (DoS-вектор); нет глобального error-handler (app.use((err, req, res, next) => ...)); не выставлен app.disable("x-powered-by") (fingerprinting); баги в порядке middleware (auth должен быть до handler). Прочтите Express security best practices один раз.