Nest.js 添加中間件


Docs: https://docs.nestjs.com/middleware

創建中間件 logger.middleware.ts

import { Injectable, NestMiddleware, MiddlewareFunction } from '@nestjs/common'

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  resolve(...args: any[]): MiddlewareFunction {
    return (req, res, next) => {
      console.log('收到請求:');
      next();
    }
  }
}

使用中間件 app.module.ts

import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './logger.middleware'

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes({
        path: '*',
        method: RequestMethod.ALL, 
      })
  }
}

函數 中間件

export function logger(req, res, next) {
  console.log(`Request...`);
  next();
};

---

configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(logger)
      .forRoutes(CatsController);
  }

全局使用

function logger(req, res, next) {
  console.log('收到請求');
  next();
}

const app = await NestFactory.create(ApplicationModule);
app.use(logger);
await app.listen(3000);

5到6的修改

// Before
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
 resolve(...args: any[]): MiddlewareFunction {
   return (req: Request, res: Response, next: Function) => {
     console.log('Request...');
     next();
   };
 }
}

// After
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: Function) {
    console.log('Request...');
    next();
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM