Middleware (промежуточное программное обеспечение) — это компоненты или функции, которые обрабатывают входящие запросы между клиентом и сервером до того, как они достигнут конечной цели (например, обработчика маршрута), или перед тем как сервер отправит ответ обратно клиенту.
Проще говоря, middleware — это «прослойка» между запросом (request) и ответом (response), которая может:
- анализировать,
- изменять,
- записывать в журнал (логировать),
- проверять безопасность и авторизацию,
- или принимать/отклонять запросы.
Как работает Middleware?
- Пользователь отправляет запрос к серверу (например, форму входа).
- Запрос проходит через одно или несколько промежуточных программ (middleware).
- Каждое middleware может:
- проверить данные (например, верный ли логин/пароль),
- модифицировать запрос (например, добавить заголовки),
- записать логи,
- прекратить выполнение, если, например, пользователь не авторизован.
- После проверки запрос передаётся в основной обработчик (например, кода, который достаёт данные из базы).
- Ответ от сервера тоже может пройти через middleware перед отправкой клиенту.
Где используется Middleware?
Middleware широко используется во всех популярных backend-фреймворках:
- Express.js (для Node.js)
- Пример: app.use(), app.get(), app.post()
- Применение: логирование, проверка токенов, CORS и пр.
- Django (Python)
- Промежуточные компоненты задаются в списке MIDDLEWARE в настройках проекта.
- Применение: управление сессиями, безопасность, переадресация.
- Также используется в ASP.NET, Laravel, FastAPI, и других системах.
Типы Middleware:
- Глобальные middleware – применяются ко всем маршрутам.
- Маршрутные (route-specific) – применяются только к определённым адресам.
- Обработка ошибок – перехватывают и обрабатывают исключения.
- Кастомные (собственные) – написаны вручную под конкретные задачи.
Пример на Express.js:
const express = require('express');
const app = express();
// Простое middleware для логирования
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // передать управление следующему middleware
});
// Middleware для авторизации
function authMiddleware(req, res, next) {
if (req.headers.authorization === "secret-token") {
next();
} else {
res.status(401).send('Доступ запрещён');
}
}
// Применение к определённому маршруту
app.get('/dashboard', authMiddleware, (req, res) => {
res.send('Панель администратора');
});
app.listen(3000, () => console.log('Сервер запущен'));
Зачем нужен middleware?
- Упрощает структуру и читаемость кода
- Позволяет централизованно управлять логикой безопасности, логами и проверками
- Повышает производительность и гибкость
- Поддерживает модульность и возможность масштабирования