【Node】Node 框架對比
最近拿nest js 重構了之前拿egg.js寫的一個專案,所以想在團隊中分享nest js。在分享之前先做個各個框架的對比。
首先大家對koa, express比較瞭解的。
Express
Express 是一個保持最小規模的靈活的 Node.js Web 應用程式開發框架,為 Web 和移動應用程式提供一組強大的功能。
github:https://github.com/expressjs/express
中文官網:https://www.expressjs.com.cn/
Koa
koa 是由 Express 原班人馬打造的,致力於成為一個更小、更富有表現力、更健壯的 Web 框架。
koa是一個擁有洋蔥模型中介軟體的http處理庫,一個請求,經過一系列的中介軟體,最後生成響應。Koa的大致實現原理:context上下文的儲存和傳遞,中介軟體的管理和next方法的實現。
中文官網:https://www.koajs.com.cn/
然後是Egg, Midway, Nest。
Egg
阿里團隊基於Koa 來做的。Egg 奉行『約定優於配置』,按照一套統一的約定進行應用開發。
對於開發者來說,Egg因為是國產,所以文件比較好理解,也比較齊全。但是Egg JS有一個問題。一個是依賴注入的問題,導致所有的程式碼檔案是按照功能來歸類的,比如所有的控制器程式碼都會放置在同一個目錄下,所有的服務程式碼也全部放置在 service 目錄下,在模組眾多的情況下,開發時需要來回切換分散在不同目錄下的檔案,給開發帶來了不便。另一個是對TS的支援天生殘缺(egg-ts-helpers),各種第三方庫的支援也不受控制。
為了解決這些問題,阿里新出了Midway框架。
Midway
Midway 是Egg 的新一代版本。
midwayjs一個面向未來的雲端一體 Node.js 框架。
Midway 是一個適用於構建 Serverless 服務,傳統應用、微服務,小程式後端的 Node.js 框架。
Midway 對於依賴採用了自動掃描的機制,連手動註冊依賴的一步都可以省去。
Midway 內部使用了自動掃描的機制,在應用初始化之前,會掃描所有的檔案,包含裝飾器的檔案會 自動繫結 到容器。
同時使用TypeScript開發。但是也有人說midway是為了ts 而 ts。
Nest
Nest.js 背後是國外的 Trilon 團隊。Nest js 是基於Express開發的, Koa.js 是 Express.js 原班人馬用新理念重新創作的框架,相信是有一定的先進性的,而 Express.js 因為產生歷史早,而有更好的生態基礎,周邊的外掛、中介軟體什麼的可能更豐富。
Nest屬於前端ts大趨勢下深度使用註解特性並提供各種增強開發體驗的框架,它提供了一套完整的解決方案,包含了認證、資料庫、路由、http狀態碼、安全、配置、請求等開箱即用的技術。
內建並完全支援 TypeScript(但仍然允許開發人員使用純 JavaScript 編寫程式碼)。
Nest js 採用命令列工具生成相應的檔案,比較provider, module, controller, filter等等,所以無需手動新增相應的檔案。
Nest js 畢竟是國外的框架,他的生態會比Midway的生態更好,這也是我為什麼選擇Nest js的原因。