聊聊node框架 Nest.js怎麼鬆耦合地整合 Express !
這篇文章帶大家聊聊node框架 Nest.js是如何鬆散地整合 Express 的,希望對大家有幫助!
Nodejs 提供了 http 模組用於監聽連接埠、處理 http 請求,回傳回應,這也是它主要做的事情。
但是 http 模組的 api 太過原始,直接基於它來處理請求回應比較麻煩,所以我們會用 express 等函式庫封裝一層。
這一層做的事情就是為request 和response 增加了很多處理請求回應的方法,滿足各種場景的需求,並且對路由做了處理,而且,也提供了中間件的呼叫鏈便於復用一些程式碼,這種中間件的呼叫鏈叫做洋蔥模型。
但這一層沒有解決架構問題:當模組多了怎麼辦,怎麼管理?如何劃分 Model、View、Controller?等等。
所以,用Node.js 做後端服務時我們會再包一層,解決架構問題,這一層的框架有eggjs(螞蟻的)、midwayjs(淘寶的)、nestjs(國外的)。
nestjs 是其中最優秀的一個:
這一層的底層還是express、koa 等,它只是在那些http 框架的基礎上額外解決了架構問題。
而且 nestjs 還有一點做的特別好,它不依賴任何一個 http 平台,可以靈活的切換。
那麼 nestjs 是怎麼做到底層平台的切換的呢?
想想 react 是怎麼做到把 vdom 渲染到 canvas、dom、native 的?
定義一層統一的接口,各種平台的 render 邏輯實作這些接口。這種模式叫做適配器模式。
適配器模式是當用到第三方實現的某個功能時,不直接依賴,而是定義一層接口,讓第三方去適配這層接口。這樣任何一個適配了這層介面的方案都能集成,也能夠靈活的切換方案。
Nest.js 對底層的http 平台就是提供了一層介面(HttpServer),定義了一堆用到的方法:
因為ts 的interface 必須實作所有的方法才行,為了簡化,又繼承了一層抽象類別AbstractHttpAdapter,把需要實作的方法定義成abstract 的。
然後express 或別的平台例如fastify 只要繼承這個適配器的類,實現其中的抽象方法,就能接入Nest.js 裡:
例如ExpressAdapter:
或FastifyAdapter:
這些邏輯分別放在platform-express 和platform-fastify套件裡:
Nest.js 第一行程式碼是呼叫create:
##這樣,之後呼叫的request 和response 的方法最後就都是express 的了。
例如在 controller 裡可以用 @Request 裝飾器來注入 reqeust 對象,就可以呼叫 reqeust 的各種方法。
import { Controller, Get, Request } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(@@Request() request: Request): string { return 'This action returns all cats'; } }
如果你想呼叫一些介面之外的特定平台的方法的話,Nest.js 也支持,那就換用@Req 來注入:
import { Controller, Get, Req } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(@@Req() request: Request): string { return 'This action returns all cats'; } }
這樣注入的就是特定平台例如express 的原生request 對象,就可以直接用它的所有方法。
此外,如果真的要用 Express 平台的特定 api 的話,在 NestFactory.create 的時候可以指定對應的類型參數,這樣就能做相應的類型提示和檢查了:
但是這樣就和特定平台耦合了,除非是確定不會切換平台,否則不建議這麼做。
http 平台是這麼做的,同理,websocket 平台也是這樣的:
#定義了一層統一的接口,透過適配器的方式分別接入socketio 和websocket,可以靈活的切換:
圖解下Nest.js 關於http 、websocket 平台的處理:
nodejs 教學!
以上是聊聊node框架 Nest.js怎麼鬆耦合地整合 Express !的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

nvm刪除node的方法:1、下載「nvm-setup.zip」並將其安裝在C碟;2、設定環境變量,並透過「nvm -v」指令查看版本號;3、使用「nvm install」指令安裝node;4、透過「nvm uninstall」指令刪除已安裝的node即可。

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

這篇文章跟大家分享Node的進程管理工具“pm2”,聊聊為什麼需要pm2、安裝和使用pm2的方法,希望對大家有幫助!

npm node gyp失敗是因為“node-gyp.js”跟“Node.js”版本不匹配,其解決辦法:1、透過“npm cache clean -f”清除node快取;2、透過“npm install -g n”安裝n模組;3、透過「n v12.21.0」指令安裝「node v12.21.0」版本即可。

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!

身份驗證是任何網路應用程式中最重要的部分之一。本教程討論基於令牌的身份驗證系統以及它們與傳統登入系統的差異。在本教程結束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統身份驗證系統在繼續基於令牌的身份驗證系統之前,讓我們先來看看傳統的身份驗證系統。使用者在登入表單中提供使用者名稱和密碼,然後點擊登入。發出請求後,透過查詢資料庫在後端驗證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會話,然後在回應頭中傳回會話訊息,以便將會話ID儲存在瀏覽器中。提供用於存取應用程式中受

什麼是單一登入系統?用nodejs怎麼實作?以下這篇文章為大家介紹一下使用node實作單一登入系統的方法,希望對大家有幫助!
