Объясните концепцию Middleware. Как реализовать Middleware?
Вопрос проверяет знание Middleware в NestJS, его роли в обработке запросов и способа реализации.
Короткий ответ
Middleware в NestJS — это функция, которая выполняется перед обработчиком маршрута. Оно имеет доступ к объектам request, response и функции next() для перехода к следующему этапу в цикле обработки запросов. Middleware используется для таких задач, как логирование, аутентификация и изменение данных запроса или ответа.
Длинный ответ
Middleware в NestJS позволяет перехватывать запросы до их передачи обработчику маршрута. Оно может быть:
- Применено к определенным маршрутам.
- Зарегистрировано глобально для всего приложения.
Для создания Middleware:
1. Создайте класс, реализующий интерфейс NestMiddleware.
2. Реализуйте метод use(), принимающий параметры req, res и next().
3. Зарегистрируйте Middleware через MiddlewareConsumer в модуле.
Пример:
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log(`Request...`);
next();
}
}
Регистрация Middleware:
import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { LoggerMiddleware } from './logger.middleware';
@Module({})
export class AppModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes({ path: 'cats', method: RequestMethod.GET });
}
}
Middleware — мощный инструмент для предобработки запросов. Применяйте его для задач, которые должны выполняться до вызова обработчика маршрута.