中间件
1.创建中间件
命令行创建中间件,然后自动生成
nest g middleware middleware/init
Init.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class InitMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
console.log(Date());
next();
}
}
2.配置中间件
在app.module.ts中引入中间件并配置
// 1.引入NestModule,MiddlewareConsumer,InitMiddleware
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { InitMiddleware } from './middleware/init.middleware'
@Module({
imports: [],
controllers: [AppController, NewsController, UserController, ProductController],
providers: [AppService],
})
// 2.配置中间件
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(InitMiddleware)
// .forRoutes('*'); // 1. 匹配所有路由
// .forRoutes('news'); // 2. 匹配指定路由
.forRoutes({ path: 'news', method: RequestMethod.ALL }, { path: 'product', method: RequestMethod.ALL }); // 3. 匹配多个路由
}
}
3.多个中间件
// 二、多个中间件
// consumer
// .apply(InitMiddleware)
// .forRoutes('*')
// .apply(UserMiddleware)
// .forRoutes('user')
// 三、写法三 用的比较多
consumer
.apply(UserMiddleware, NewsMiddleware, logger)
.forRoutes(
{ path: 'user', method: RequestMethod.ALL },
{ path: 'news', method: RequestMethod.ALL },
)
4.函数式中间件
创建
在middleware文件夹下创建logger.middleware.ts
// 四、函数式中间件
export function logger(req, res, next) {
console.log('函数式中间件');
next();
}
使用
app.module.ts
import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
// ...
import { logger } from './middleware/logger.middleware'
@Module({
//...
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
// 函数式中间件的使用-logger
consumer
.apply(UserMiddleware, NewsMiddleware, logger)
.forRoutes(
{ path: 'user', method: RequestMethod.ALL },
{ path: 'news', method: RequestMethod.ALL },
)
}
}
5.全局中间件
创建
使用上变的函数式中间件
使用
main.ts
注意:
1.在main.ts中使用
2.全局中间件只能引入函数式中间件
// ...
// 引入函数式中间件
import { NestExpressApplication } from '@nestjs/platform-express';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
//...
// 使用全局中间件
app.use(logger);
await app.listen(3000);
}
bootstrap();