nest.js筆記
阿新 • • 發佈:2018-10-31
nest的核心概念:
Nest的核心概念是提供一種體系結構,它幫助開發人員實現層的最大分離,並在應用程式中增加抽象。
架構預覽:
主要有三個核心概念:模組Module, 控制器Controller, 服務與依賴注入 Provider Dependency injection
- 模組Module: 用於將程式碼拆分為獨立的和可重用的模組,例如使用者資訊模組,然後將該使用者模組的控制器和服務集合進來,最後直接將使用者模組匯入到根Module就可以使用了。
- 控制器Controller: 負責處理客戶端傳入的請求引數並向客戶端返回響應資料。nest.js提供許多http請求的裝飾器,如例如@Body(),@Post()等。控制器不需要定義任何諸如從客戶端獲取資料、驗證使用者輸入等工作,這些都是交給服務Provider處理,通過把任務委託給各種服務,可以讓控制器類更加精簡、高效。
- 服務Provider :在這裡處理所有請求執行邏輯,在控制器中通過constructor函式以依賴注入的方式實現。
constructor(private readonly catsService: CatsService) {}
其他概念:
- 中介軟體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); } }
全域性註冊影響全部路由,區域性註冊只是影響當前路由下的路由。