nest 中 Middleware 的介绍
Nest中的中间件可以用来处理身份认证、日志记录、错误处理和缓存等任务。
下面对日志记录进行简单的描述
logger
nest g mi logger
- 命令行生成Middleware模块
middlerWare的两种编写方式
继承 NestMiddleware 方式
import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
console.log(`Request URL: ${req.url}`);
next();
}
}
函数的方式
import { Request, Response, NextFunction } from 'express';
export function logger(req: Request, res: Response, next: NextFunction) {
console.log(`Request URL: ${req.url}`);
next();
}
- NestMiddleware:用于处理控制器之前和之后的请求和响应。
- next:允许继续下一步,否则中止程序。
使用
方案 1
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('cats');
}
}
在上面的示例中,在 CatsController 中定义的 /cats 路由处理程序设置了 LoggerMiddleware。也可以通过 forRoutes('*')对全局的路由进行使用。
方案 2
//main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { LoggerMiddleware } from './logger.middleware';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(LoggerMiddleware);
await app.listen(3000);
}
bootstrap();
在上面的示例中,直接使用 use 进行全局使用