1. 程式人生 > >nest.js筆記

nest.js筆記

nest的核心概念:

Nest的核心概念是提供一種體系結構,它幫助開發人員實現層的最大分離,並在應用程式中增加抽象。

架構預覽:

主要有三個核心概念:模組Module,  控制器Controller, 服務與依賴注入 Provider Dependency injection

  1. 模組Module:   用於將程式碼拆分為獨立的和可重用的模組,例如使用者資訊模組,然後將該使用者模組的控制器和服務集合進來,最後直接將使用者模組匯入到根Module就可以使用了。
  2. 控制器Controller: 負責處理客戶端傳入的請求引數並向客戶端返回響應資料。nest.js提供許多http請求的裝飾器,如例如@Body(),@Post()等。控制器不需要定義任何諸如從客戶端獲取資料、驗證使用者輸入等工作,這些都是交給服務Provider處理,通過把任務委託給各種服務,可以讓控制器類更加精簡、高效。
  3. 服務Provider :在這裡處理所有請求執行邏輯,在控制器中通過constructor函式以依賴注入的方式實現。
    constructor(private readonly catsService: CatsService) {}

     

其他概念:

  1. 中介軟體Middleware: 中介軟體功能可以訪問請求和響應物件,在路由處理程式之前呼叫。
// 實現一個帶有`@Injectable()`裝飾器的類列印中介軟體
import { Injectable, NestMiddleware, MiddlewareFunction } from '@nestjs/common';

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

使用有兩種方式:全域性註冊和區域性模組註冊。

//  全域性註冊
async function bootstrap() {
  // 建立Nest.js例項
  const app = await NestFactory.create(AppModule, application, {
    bodyParser: true,
  });
  // 註冊中介軟體
  app.use(LoggerMiddleware());
  
// 監聽3000埠 await app.listen(3000); } bootstrap();
//  模組區域性註冊
export class CnodeModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .with('ApplicationModule')
      .exclude(
        { path: 'user', method: RequestMethod.GET },
        { path: 'user', method: RequestMethod.POST },
      )
      .forRoutes(UserController);
  }
}

全域性註冊影響全部路由,區域性註冊只是影響當前路由下的路由。

 

 

Middleware