NestJS之07- 中间件使用

329 阅读1分钟

1. 中间件

中间件原理

2. 创建一个中间件

先到src目录下,使用 nest g mi 中间件名称

logger.middleware.ts

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('打印***req 中间件拦截', req.header);
    next();
  }
}

3. 使用中间件

中间件使用方式

  1. 指定地址

user.controller.ts

import { Global, Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { LoggerMiddleware } from 'src/logger/logger.middleware';

@Global()
@Module({
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService],
})
export class UserModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('user');
  }
}

访问 http://localhost:3000/user

image.png

  1. 配置对象形式
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes({
      path: 'user',
      method: RequestMethod.GET,
    });
  }
  1. 直接传入controller
consumer.apply(LoggerMiddleware).forRoutes(UserController);

2. 全局中间件

注意全局中间件只能使用函数模式 案例可以做白名单拦截之类的

main.ts

import { NestFactory } from '@nestjs/core';
import { NextFunction, Response, Request } from 'express';
import { AppModule } from './app.module';

const whiteList = ['/user'];

function middlewareWhole(req: Request, res: Response, next: NextFunction) {
  console.log('打印***req.originalUrl', req.originalUrl);
  if (whiteList.includes(req.originalUrl)) {
    next();
  } else {
    console.log('全局拦截');
  }
}

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.use(middlewareWhole); // 不需要调用
  await app.listen(3000);
}
bootstrap();

3.接入第三方中间件 cors

处理跨域

npm install cors

npm install @types/cors -D

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as cors from 'cors';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.use(cors());
  await app.listen(3000);
}
bootstrap();