nest学习摘要(3)

30 阅读1分钟

nest中间件

>  middleware

import {InjectableNestMiddleware} from '@nestjs/common'
Injectable()
export class Logger implements NestMiddleware{
    use(req:Request,res:Response,next:NextFunction){
       console.log('我进来了哦!');
       //next()
       res.send('┗|`O′|┛ 嗷~~')
  }
}



> user.modoule

import { Logger } from 'src/middleware/middleware';
@Module({
 controllers: [UserController],
 providers: [UserService],
 exports:[UserService]
})
export class UserModule implements NestModule {
 configure(consumer: MiddlewareConsumer){
    consumer.apply(Logger).forRoutes({path:'user',method:RequestMethod.GET})
 }
}

下面的写法为全局中间件,一般用于设置白名单

在main.js内操作

// 导入NestJS核心工厂类,用于创建应用实例
import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common';
// 导入根模块,整个应用的入口模块
import { AppModule } from './app.module';
 import {Request,Response,NextFunction} from "express"
import cors from 'cors'
 const whiteList=["/user"]
 function middleware(req:Request,res:Response,next:NextFunction){
    console.log(req.originalUrl,'req');
       if(whiteList.includes(req.originalUrl)){
            next()
       }else{
          res.send('小黑子,不许进')
       }

 }
/**
 * 应用程序启动函数 - 程序的入口点
 * 就像按下电脑的开机按钮,启动整个NestJS应用
 */
async function bootstrap() {
  // 使用NestFactory创建应用实例,传入根模块AppModule
  const app = await NestFactory.create(AppModule);
  //这里进行的是版本控制,通过URL控制
  app.enableVersioning({
    type:VersioningType.URI
  })
  app.use(cors())  👈👈👈👈👈👈 //我们也可以使用cors来解决跨越问题
  app.use(middleware)
  await app.listen(process.env.PORT ?? 3000);
  console.log('应用已启动,访问地址: http://localhost:3000');
}

bootstrap();