Nest 作為一個漸進式的 Node.js 服務器端框架,它實現了類似于 Java Spring 的功能,可以說是填補了現在 JavaScript 在服務器端的企業級應用框架,再加上 TypeScript 的支持,它讓開發體驗得到進一步提高。官方給 Nest 特性:可擴展、可伸縮的漸進式服務器端應用程序框架。當然我們還不知道它的威力是否大過現在流行的服務端框架 Java Spring 或者 .NET 等,但是它給我們帶來的希望是 JavaScript 的全棧能力。
通過一段時間 Nest 的學習和簡單實踐,回過頭來總結一下,以便未來更好的運用。
先回顧相關文章:
- 《【Nest 極速指南】基礎篇之 HelloWorld》
- 《【Nest 極速指南】基礎篇之 Controller》
- 《【Nest 極速指南】基礎篇之 Provider》
- 《【Nest 極速指南】基礎篇之 Module》
- 《【Nest 極速指南】進階篇之 Middleware》
- 《【Nest 極速指南】進階篇之其它》
- 《【Nest 極速指南】應用篇之數據庫》
- 《【Nest 極速指南】應用篇之 ElasticSearch
Nest 的基本功能
Nest 基本功能已經提供了日常所需,但是在使用的時候,切記它的設計原則:AOP 的編程思想,大量使用依賴注入的方式。下面我們一一介紹:
- Controller
- Provider
- Module
- Middleware
- ExceptionFilter
- Pipe
- Guard
- Interceptor
Controller
Controller 負責處理傳入的請求,并返回相關響應。它內置的路由和獲取 HTTP 上下文相關模塊,讓我們很好的處理業務邏輯,并完成 RESTful 接口。當然,它要其效果,必須要注冊到模塊的 controllers
屬性中去。
Provider
幾乎所有的組件模塊都可以認為是 Provider:service, repository, factory, helper 等等。他們都可以通過構造函數 constructor
注入依賴關系。Provider 可以說是 Controller 的輔助模塊,它可以幫助你連接數據庫、獲取緩存數據、公共數據處理模塊等等。當然,他也需要注冊到模塊的 providers
屬性中去。
Module
Module 這個組件起到將各個模塊組織在一起的作用,Nest 應用程序也必須有一個 Module 模塊。
Middleware
Middleware 是一個在路由處理器之前被調用的函數,中間件函數可以訪問請求和響應對象,它可以作為對請求數據和返回數據的處理。
ExceptionFilter
ExceptionFilter 是解決異常處理的,需要實現 ExceptionFilter
,然后通過 @UseFilters
來使用。
Pipe
Pipe 管道是用來做數據轉換的,另外它也可以處理數據的驗證,需要實現 PipeTransform
,然后通過 @UsePipes
來使用。
Guard
Guard 守衛是來解決權限問題的,它可以針對某個請求來控制路由的可用不可用。需要實現 CanActivate
,然后通過 @UseGuards
來使用。
Interceptor
Interceptor 攔截器,上面的 ExceptionFilter、Pipe、Guard 個人感覺是攔截器的特定場景的實現,當然還有很多不再這些業務場景的功能,那就需要攔截器來做了。同樣需要實現 NestInterceptor
,然后通過 @UseInterceptors
來使用。
Nest 相關技術
Nest 還提供了和服務端相關的各種組件,例如 ORM、ES、Redis 等相關技術,來滿足日常開發:
- TypeORM
- Authentication
- Caching
- Serialization
- Log
- Security
- Configuration
- GraphQL
- ...
TypeORM
TypeORM 絕對是 Node.js 中可用的最成熟的對象關系映射器 (ORM),我們只需要通過簡單的編寫,就能夠完成數據庫的相關操作。
Authentication
Authentication 這一塊 Nest 采用的是 Nodejs 最流行的庫 passport
,他可以幫你很容易的解決權限相關問題。
Caching
Nest 也提供了豐富的緩存方式:內存緩存、Redis、自定義緩存等等。
Serialization
Nest 附帶了這個 ClassSerializerInterceptor 類。它使用類轉換器來提供轉換對象的聲明性和可擴展方式。
Log
日志記錄是服務端應用不可獲取的功能,Nest 提供了內置的日志系統,當然也可以采用用戶自己提供的。
Security
安全這一塊,Nest 提供了 Helmet、CORS、CSRF、限速等功能。
Configuration
針對不同環境的運行 Nest 提供了 ConfigModule 來解決這一問題,不過個人還是覺得不要使用它自帶的,自己來寫就行了。
GraphQL
當今前端流行的 GraphQL,它當然支持,只需要簡單的引入相關模塊就可以了。
寫在最后
Nest 的確是一個 Nodejs 服務器端應用的一個完善的框架,它提供了強大的工具讓我們完成一個后端 API 的相關功能,從路由到權限、從數據庫到緩存、從日志到安全,甚至是比較流行的搜索、GraphQL、微服務等功能它也提供給我們。個人感覺,它是現階段 Nodejs 相對完善的、可以作為企業級開發的框架。
當然 Nodejs 的服務端應用,相比起 Java、.NET、Pathy 這些經典框架來說,還有很多不足之處,當然這些經典框架都有大廠和廣大社區的大力支持和發展。但是 JavaScript 這種跨端而生的語言來說,Nest 是一個新的開端,它告訴我們 JavaScript 不僅可以作為 Web 端 App 端的開發語言,也能夠很好的應付服務器端復雜的業務。期待它變得更好更強大。
〖堅持的一俢〗