JS back-end framework Nest.js entry middleware aop, Middleware (cuatro)

Nota: este artículo solo registra el conocimiento y la comprensión del blogger después de aprender nestjs por primera vez. La experiencia aún es superficial y el contenido del artículo es solo de referencia. Corríjame si hay algún error.

Como aspecto

Este artículo no discutirá los detalles temporalmente.

1. Tipo de aspecto: clase de implementación de la interfaz NestMiddleware

2. Entrada de aspecto

  • Objeto de solicitud
  • Objeto de respuesta
  • siguiente función

3. Salida de sección: luego ingrese a la siguiente sección

4. Usa la escena

  • Ejecute cualquier código.
  • Realice cambios en los objetos de solicitud y respuesta.
  • Finalice el ciclo de solicitud-respuesta.
  • Llame a la siguiente función de middleware de la pila.
  • Si la función de middleware actual no finaliza el ciclo de solicitud-respuesta, debe llamar a next () para pasar el control a la siguiente función de middleware. De lo contrario, se suspenderá la solicitud.

Caso simple

1. Definición de middleware

  • Método 1: middleware de clase
import {
    
     Injectable, NestMiddleware } from '@nestjs/common';
import {
    
     Request, Response } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
    
    
  // 中间件定义:必须是NestMiddleware接口的实现类并且实现use方法,参数为请求、响应、转发到下一个中间件的方法
  use(req: Request, res: Response, next: Function) {
    
    
    console.log('Request...');
    next();
  }
}
  • Método 2: middleware funcional
export function logger(req, res, next) {
    
    
  	console.log(`Request...`);
  	next();
}

2. Registro de middleware

  • Registro del módulo (app.module.ts)
import {
    
     Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import {
    
     LoggerMiddleware } from './common/middleware/logger.middleware';
import {
    
     CatsModule } from './cats/cats.module';
import {
    
     CatsController } from './cats/cats.controller.ts';

@Module({
    
    
  imports: [CatsModule],
})
export class AppModule implements NestModule {
    
    
  // 中间件注册:不在@module中配置,而是在NestModule接口的configure方法中注册一个中间件消费者(MiddlewareConsumer)实例,在该实例中配置该中间件消费者的消费特征(应用哪个中间件、处理哪些请求、排除哪些请求)。
  configure(consumer: MiddlewareConsumer) {
    
    
    consumer
      .apply(LoggerMiddleware)// 可配置多个中间件
      .exclude(
    {
    
     path: 'cats', method: RequestMethod.GET },
    {
    
     path: 'cats', method: RequestMethod.POST },
    'cats/(.*)',
  )
      // forRoutes配置经过中间件的请求有哪些,可接受一个字符串、多个字符串、对象、一个控制器类甚至多个控制器类,传对象时path属性支持通配符*。
      .forRoutes(CatsController);
  }
}
  • Registro global (main.ts)
const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);

Supongo que te gusta

Origin blog.csdn.net/jw2268136570/article/details/107838681
Recomendado
Clasificación