Nestjs中间件常见使用方式(class、函数中间件)
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();
}
}
// 使用函数的方式创建中间件
export function logger(req, res, next) {
console.log('Request...');
next();
}
// 在模块中配置中间件
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { LoggerMiddleware, logger } from './common/middleware';
@Module({
// ... (controllers and providers)
})
export class ApplicationModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
// 使用类的方式注册中间件
consumer.apply(LoggerMiddleware).forRoutes('*');
// 使用函数的方式注册中间件
consumer.apply(logger).forRoutes('*');
}
}
这个例子展示了如何在NestJS中定义和使用中间件。首先,我们创建了一个使用@Injectable()
装饰器的LoggerMiddleware
类,实现了NestMiddleware
接口,并在其use
方法中实现了日志记录的功能。接着,我们创建了一个普通的函数logger
,也可以完成同样的工作。最后,在一个模块的configure
方法中,我们使用MiddlewareConsumer
来注册这些中间件,使其作用于所有路由('*')。
评论已关闭