【Nest 極速指南】總結(jié)篇

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 的基本功能

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)持的一俢〗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容