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