理解 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 的使用有所帮助。