Chuyển đến nội dung chính

第 1 課:NestJS 簡介 - 為什麼選擇 NestJS?

了解 NestJS 是什麼,與 Express、Fastify、Koa 進行比較。基於模組的架構、依賴注入、TypeScript 優先。生態系統和實際用例。

💻 程式設計 — 第 1 課 第 1 課:NestJS 簡介 - 為什麼選擇 巢JS?

NestJS:從基礎到高級

第 1 部分:NestJS 平台

亞洲開發網

1.NestJS是什麼?

NestJS 是一個漸進式的 Node.js 框架,使用 TypeScript 作為主要語言,旨在建立高效能、可靠且高度可擴展的伺服器端應用程式。創建者: 卡米爾·邁斯利維克 2017 年,NestJS 從 Angular 的架構中汲取靈感 基於模組, 依賴注入 和 裝飾器模式。

NestJS 在 Express.js(預設)或 Fastify 上運行,在上面提供了一個抽象層,但仍然允許在需要時直接存取底層平台的 API。

為什麼選擇 NestJS?

  • TypeScript優先:完全用TypeScript編寫,支援強型別安全

  • 建築固執己見:為大型團隊提供清晰、易於維護的架構

  • 依賴注入:IoC容器內置,易於測試且鬆散耦合

  • 豐富的生態系統:GraphQL、WebSockets、微服務、CQRS 和 200 多個官方包

  • 企業就緒:阿迪達斯、羅氏、Trilon 和許多大公司使用

2. NestJS 與其他框架的比較

標準NestJS快遞快速化相思木
打字稿本地人外掛外掛外掛
大樓有主見極簡主義極簡主義極簡主義
DI 容器內建❌❌❌
命令列介面強大快遞生成器fastify-cli❌
GraphQL@nestjs/graphql阿波羅伺服器水星阿波羅伺服器
WebSockets@nestjs/websockets套接字.iofastify-websocket手冊
微服務內建❌❌❌
測試測試模組手動設定手動設定手動設定
學習曲線平均低低低
適合企業、大團隊MVP,小型應用程式高效能以中介軟體為中心

3.NestJS架構

NestJS遵循以下架構 3層 與模組系統結合:

┌──────────────────────────────────────────────┐
│                  Application                  │
├──────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐            │
│  │ Module A     │  │ Module B     │           │
│  │ ┌─────────┐ │  │ ┌─────────┐ │           │
│  │ │Controller│ │  │ │Controller│ │           │
│  │ └────┬────┘ │  │ └────┬────┘ │           │
│  │      ↓      │  │      ↓      │           │
│  │ ┌─────────┐ │  │ ┌─────────┐ │           │
│  │ │ Service  │ │  │ │ Service  │ │           │
│  │ └────┬────┘ │  │ └────┬────┘ │           │
│  │      ↓      │  │      ↓      │           │
│  │ ┌─────────┐ │  │ ┌─────────┐ │           │
│  │ │  Repo   │ │  │ │  Repo   │ │           │
│  │ └─────────┘ │  │ └─────────┘ │           │
│  └─────────────┘  └─────────────┘            │
├──────────────────────────────────────────────┤
│           Platform (Express/Fastify)          │
└──────────────────────────────────────────────┘

主要成分

  • 模組:代碼組織單元,將相關組件分組在一起

  • 控制器:處理HTTP請求,定義路由並回傳回應

  • 提供者/服務:包含業務邏輯,透過DI注入到Controller中

  • 衛兵:在向處理程序請求之前檢查授權

  • 攔截器:在處理程序處理之前/之後轉換數據

  • 管道:驗證並轉換輸入數據

  • 過濾器:處理異常並格式化錯誤回應

  • 中介軟體:在路由處理程序之前運行,類似於 Express 中間件

4. NestJS中的請求生命週期

當 HTTP 請求到達 NestJS 應用程式時,它會以以下順序遍歷這些類別:

Request
  → Middleware
    → Guards
      → Interceptors (before)
        → Pipes
          → Route Handler (Controller method)
        → Interceptors (after)
      → Exception Filters (nếu có lỗi)
Response

理解這個生命週期很重要,因為它可以幫助您知道在哪裡適當地放置邏輯。

5.NestJS生態系統

NestJS擁有非常豐富的官方軟體包生態系統:

套餐目的
@nestjs/typebugSQL 資料庫的 TypeORM 集成
@nestjs/貓鼬MongoDB 的 Mongoose 集成
@nestjs/graphqlGraphQL API 與 Apollo/Mercurius
@nestjs/websockets使用 WebSocket/Socket.IO 實現即時
@nestjs/微服務微服務(TCP、Redis、NATS、RabbitMQ、Kafka、gRPC)
@nestjs/護照認證策略
@nestjs/jwtJWT 令牌產生/驗證
@nestjs/節流器速率限制
@nestjs/配置配置管理
@nestjs/時間表任務調度(Cron 作業)
@nestjs/快取管理器快取(記憶體、Redis)
@nestjs/招搖OpenAPI/Swagger 文檔
@nestjs/終點站健康檢查
@nestjs/事件發射器事件驅動架構
@nestjs/cqrs命令查詢職責分離

6.什麼時候該使用NestJS?

您應該在以下情況下使用 NestJS:

  • 企業專案和大型團隊需要清晰的架構
  • 需要 TypeScript 本機支持
  • 需要微服務架構
  • 需要整合很多協定(REST + GraphQL + WebSocket)
  • 長期專案需要高可維護性
  • Angular/React/Vue 應用程式的後端

在以下情況下考慮替代方案:

  • 小 MVP,需要快速運送 → Express/Fastify
  • 簡單的無伺服器函數 → 即時 AWS Lambda
  • 極為簡單的 API,很少的端點 → Hono、Elysia

七、總結

NestJS是最現代的後端開發Node.js框架,特別適合需要清晰架構和可擴充性的企業專案。憑藉 TypeScript 優先的方法、內建的依賴注入和豐富的生態系統,NestJS 幫助開發人員高效建立高品質的應用程式。

在下一篇文章中,我們將回顧 TypeScript 要點——有效使用 NestJS 所需的 TypeScript 知識。