
Что такое middleware? Примеры в Express, FastAPI и других фреймворках
Middleware — это важный механизм современных фреймворков. Он помогает обработать дополнительные действия внутри программы. Рассмотрим примеры использования в Express, FastAPI и других системах.
Middleware (промежуточное программное обеспечение) — это промежуточная логика, которая выполняется между получением запроса сервером и возвратом ответа клиенту. В большинстве современных веб-фреймворков middleware используется для реализации таких вещей, как аутентификация, логирование, обработка ошибок, проверка прав доступа, подготовка заголовков или форматирование ответа.
Как это работает на общем уровне?
Когда поступает HTTP-запрос, сервер не обязательно сразу передаёт его главному обработчику (то есть функции, которая формирует ответ). Сначала он может пройти через несколько middleware-функций — каждая из которых либо что-то делает с запросом, либо проверяет, можно ли запросу двигаться дальше. Некоторые middleware могут полностью остановить дальнейшую обработку, например, если токен недействителен.
Middleware в Express.js
Express.js — один из самых популярных фреймворков Node.js, и в нём концепция middleware — основа всей архитектуры. Middleware в Express — это функции, которые имеют доступ к объекту запроса (req), объекту ответа (res) и следующей функции в цепочке (next).
Вот базовый пример middleware в Express:
// Простой middleware function logger(req, res, next) { console.log(`${req.method} ${req.url}`); next(); // обязательно вызвать, чтобы передать управление дальше } app.use(logger); // применяем middleware глобально
Такие middleware могут быть применены глобально (через app.use), или только к отдельным маршрутам. Во фреймворке middleware выполняется последовательно в порядке, в котором оно было зарегистрировано.
Типы middleware в Express:
- Глобальные (app.use(…))Маршрутные (app.get('/path', middleware, handler))Обработчики ошибок (с 4-мя параметрами: err, req, res, next)Встроенные (например, express.json())
Курс изучения JavaScript
Можете пройти наш бесплатный курс по изучению JavaScript
Middleware в FastAPI
FastAPI — это фреймворк на Python, который поддерживает асинхронность и типизацию. В нём middleware также выполняется на каждый HTTP-запрос, если оно подключено. Middleware здесь — это функции, которые выполняются до и после того, как запрос дойдёт до основного маршрута.
Вот пример middleware в FastAPI:
from fastapi import FastAPI, Request from starlette.middleware.base import BaseHTTPMiddleware app = FastAPI() # Создание middleware-класса class LoggerMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): print(f»Запрос: {request.method} {request.url}») response = await call_next(request) # Передаём запрос дальше return response # Добавление middleware в FastAPI app.add_middleware(LoggerMiddleware)
В FastAPI middleware также может выполнять валидацию токенов, логирование, изменять заголовки или перехватывать исключения. Порядок выполнения middleware также имеет значение: первым зарегистрированное — первым и выполняется.
Особенности FastAPI middleware:
- Использует классы на базе BaseHTTPMiddlewareПоддерживает асинхронные функцииПозволяет изменять как запрос, так и ответ
Курс изучения Python
Можете пройти наш бесплатный курс по изучению Python
Middleware в других фреймворках
В большинстве современных фреймворков, таких как Laravel (PHP), ASP.NET (C#), Django (Python), Koa (Node.js), существует аналогичная концепция middleware. Хотя реализация отличается, идея одна и та же — это слой между HTTP-запросом и конечной точкой обработки.
Например, в Laravel middleware — это классы, которые можно применять к группам маршрутов или отдельным маршрутам. В Django — это функции или классы, которые оборачивают обработку запроса. В Koa middleware реализовано как стек функций, работающих на основе async/await.
Сравнение: Express, FastAPI, Laravel, Django
| Фреймворк | Тип middleware | Формат |
|---|---|---|
| Express | Функции | function(req, res, next) |
| FastAPI | Классы | class BaseHTTPMiddleware |
| Laravel | Классы | handle($request, Closure $next) |
| Django | Классы или функции | __call__ или process_view() |
Когда использовать middleware
Middleware — идеальный инструмент, когда нужно применить повторяющуюся логику к большому количеству маршрутов. Наиболее типичные сценарии:
- Логирование запросовПроверка аутентификацииОбработка ошибокНастройка CORSИзменение/фильтрация входящих данныхСжатие, кэширование, ограничение частоты запросов
При правильном использовании middleware позволяет сократить дублирование кода, повысить безопасность и улучшить поддержку проекта. Важно следить за порядком подключения middleware, ведь именно он определяет, как будет обработан запрос.



























