中间件
原创2026/3/5大约 2 分钟
中间件是一个称为 before 路由处理程序的函数。 中间件函数可以访问 request 和 response 对象,以及应用请求-响应周期中的 next() 中间件函数。 next 中间件函数通常由名为 next 的变量表示。

默认情况下,Nest 中间件等同于 express 中间件。 官方 express 文档中的以下描述描述了中间件的功能
中间件函数可以执行以下任务
- 执行任何代码。
- 更改请求和响应对象。
- 结束请求-响应循环。
- 调用堆栈中的下一个中间件函数。
- 如果当前中间件函数没有结束请求-响应循环,它必须调用 next() 将控制权传递给下一个中间件函数。 否则,请求将被挂起。
现在我们创建一个logger中间件
nest g mi ./middleware/logger我们看到在src/middleware目录下
import { Injectable, NestMiddleware } from '@nestjs/common'
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
next()
}
}简单修改
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()
}
}Nest 中间件完全支持依赖注入。 就像提供者和控制器一样,他们能够在同一模块中使用 注入依赖。 像往常一样,这是通过 constructor 完成的。
应用中间件
@Module() 装饰器中没有中间件的位置。 相反,我们使用模块类的 configure() 方法设置它们。 包含中间件的模块必须实现 NestModule 接口。 让我们在 AppModule 级别设置 LoggerMiddleware。
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common'
import { LoggerMiddleware } from 'src/middleware/logger/logger.middleware'
import { UserModule } from './modules/user/user.module'
@Module({
imports: [CatsModule],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('user')
}
}现在我们每次访问user模块下的路由地址http://localhost:3000/user,都会在控制台打印Request...
或者也可以具体到某一个请求方法
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes({ path: 'user', method: RequestMethod.GET })
}
}全局中间件
如果我们想一次将中间件绑定到每个已注册的路由,我们可以使用 INestApplication 实例提供的 use() 方法:
const app = await NestFactory.create(AppModule)
app.use(LoggerMiddleware)
await app.listen(3000)至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。