Этот вопрос проверяет понимание роли middleware в фреймворке Nest.js для обработки входящих запросов перед их попаданием в обработчики маршрутов.
Middleware в Nest.js — это функции, которые выполняются перед обработчиками маршрутов (controller's handlers). Они имеют доступ к объектам запроса и ответа, а также к следующей функции в цепочке middleware. Они используются для таких задач, как логирование, сжатие данных, парсинг cookies, проверка CORS и аутентификация.
Middleware — это фундаментальная часть конвейера обработки запроса в Nest.js. Он работает на уровне модуля или глобально.
Что можно делать с помощью Middleware:
Логирование: Записывать информацию о каждом входящем запросе.
Аутентификация и авторизация: Проверять JWT-токены или сессии доступа к защищенным маршрутам.
Парсинг данных: Например, парсинг тела запроса в JSON (это встроенный middleware).
Валидация: Предварительная проверка данных запроса.
CORS: Настройка заголовков для кросс-доменных запросов.
Сжатие данных: Например, использование middleware compression.
Пример создания простого middleware для логирования:
// logging.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggingMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log(`Request... ${req.method} ${req.url}`);
const start = Date.now();
// Колбэк выполнится, когда ответ будет отправлен
res.on('finish', () => {
const duration = Date.now() - start;
console.log(`Response... ${req.method} ${req.url} ${res.statusCode} ${duration}ms`);
});
next(); // Передаем управление следующему middleware/обработчику
}
}Регистрация Middleware в модуле:
// app.module.ts
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggingMiddleware)
.forRoutes('*'); // Применяем ко всем маршрутам
}
}Вывод: Middleware — это мощный инструмент для сквозной функциональности, который позволяет инкапсулировать общую логику обработки запросов в одном месте.