Nest 中间件
中间件实在路由处理程序之前调用的函数;同时可以访问请求和响应对象,以及程序请求响应周期中的next()
中间函数;
简单理解就是:前端路由守卫,做拦截处理;
常见的中间件使用方式大致为:class, 函数
使用
使用cli
命令自动生成中间件模板:nest g mi logger
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import { Injectable, NestMiddleware } from "@nestjs/common"; import { NextFunction, Request, Response } from "express";
@Injectable() export class LoggerMiddleware implements NestMiddleware { use(req: Request, res: Response, next: NextFunction) { console.log(req.baseUrl); console.log(`Request received at ${new Date()}`); next(); } }
export const loggerMiddleware = ( req: Request, res: Response, next: NextFunction ) => { console.log(req.baseUrl); console.log(`Request received at ${new Date()}`); next(); };
export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(LoggerMiddleware, loggerMiddleware).forRoutes("/a", "/b"); } }
async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); app.use(loggerMiddleware); }
|
跨域案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import { Injectable, NestMiddleware } from "@nestjs/common";
@Injectable() export class CorsMiddleware implements NestMiddleware { use(req: any, res: any, next: any) { const allowedOrigin = process.env.CORS_ORIGIN ?? "*"; res.setHeader("Access-Control-Allow-Origin", allowedOrigin); res.setHeader( "Access-Control-Allow-Methods", "GET,HEAD,PUT,PATCH,POST,DELETE" ); res.setHeader( "Access-Control-Allow-Headers", "Content-Type,Authorization, Content-Length, X-Requested-With" ); next(); } }
export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(CorsMiddleware).forRoutes("*"); } }
|