Ответ
Middleware — это функция в Express.js (и других фреймворках Node.js), которая имеет доступ к объектам запроса (req), ответа (res) и следующей функции middleware в стеке (next). Она выполняется в процессе обработки HTTP-запроса и может:
- Выполнять любой код (логирование, аутентификацию).
- Изменять объекты
reqиres(добавлять данные, заголовки). - Завершать цикл запроса-ответа (например, отправив ответ клиенту).
- Вызвать следующую middleware в стеке с помощью
next().
Базовый пример:
// Middleware для логирования времени запроса
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next(); // Передаём управление следующему middleware
});
// Middleware для парсинга JSON-тела запроса (встроенный)
app.use(express.json());
// Маршрут с middleware для проверки аутентификации
app.get('/profile', authMiddleware, (req, res) => {
res.json({ user: req.user }); // req.user был добавлен в authMiddleware
});
Типы middleware в Express:
- Прикладные (Application-level):
app.use()илиapp.METHOD()— выполняются для всех или конкретных маршрутов. - Маршрутные (Router-level): Аналогичны прикладным, но привязаны к экземпляру
express.Router(). - Обработки ошибок: Принимают четыре аргумента
(err, req, res, next). Должны быть объявлены после всех другихapp.use(). - Встроенные (Built-in):
express.json(),express.static(). - Сторонние (Third-party): Пакеты npm, такие как
morganдля логирования,helmetдля безопасности,corsдля управления CORS.
Важно: Порядок объявления middleware критически важен, так как они выполняются последовательно.