理解 Nest.js 中的 Middleware

374 阅读2分钟

理解 Nest.js 中的 Middleware

在 Nest.js 中,Middleware 可以用来处理请求和响应,它可以在请求到达控制器之前或返回浏览器之前添加自定义的逻辑。在 Nest.js 中,我们可以使用内置的 Middleware,也可以编写自己的 Middleware。

内置 Middleware

在 Nest.js 中,内置的 Middleware 包括以下几种:

  • LoggerMiddleware:用于记录请求日志。
  • CorsMiddleware:用于跨域资源共享。
  • bodyParser:用于解析请求体的中间件。

下面是一个示例,展示如何在 Nest.js 中使用内置 Middleware:

import {LoggerMiddleware} from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.use(LoggerMiddleware);
  await app.listen(3000);
}

在上述示例中,我们使用了 LoggerMiddleware 内置中间件,将其作为全局中间件添加到了应用中。这意味着所有的请求都会经过该中间件。

自定义 Middleware

除了内置 Middleware 外,Nest.js 还支持开发者编写自定义的 Middleware。自定义 Middleware 可以根据开发者的需求,对请求和响应进行更加细致和灵活的处理。

下面是一个示例,展示如何编写自定义 Middleware:

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response } from 'express';

@Injectable()
export class CustomMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: Function) {
    console.log('Request logged:', req.method, req.url);
    next();
  }
}

在上述示例中,我们定义了名为 CustomMiddleware 的自定义 Middleware,并实现了 NestMiddleware 接口。在 use() 方法中,我们可以对请求进行自定义的处理。在这个例子中,我们简单地输出了一条日志信息。

下面是一个示例,展示如何在 Nest.js 中使用自定义 Middleware:

import { Controller, Get, UseMiddleware } from '@nestjs/common';
import { CustomMiddleware } from './custom.middleware';

@Controller('cats')
@UseMiddleware(CustomMiddleware)
export class CatsController {
  @Get()
  findAll(): string[] {
    return ['Cat1', 'Cat2', 'Cat3'];
  }
}

在上述示例中,我们在控制器上使用了 @UseMiddleware(CustomMiddleware) 装饰器,在请求到达控制器之前使用了自定义 Middleware。在该例子中,我们输出了一条日志信息。

总结

在 Nest.js 中,Middleware 可以用来处理请求和响应,在 Nest.js 中我们可以使用内置的 Middleware,也可以编写自己的 Middleware。希望这篇文章对您理解 Nest.js 中 Middleware 的使用有所帮助。