但願這篇文章爲你們對 Node.js 後端框架選型帶來一些幫助。前端
JavaScript 這門語言的設計雖然被不少人詬病,可是由於其佔據了瀏覽器並且容易上手因此普遍流行。後來隨着 Node.js 的出現,npm 包管理帶來的強大生態更是如虎添翼(截止到 2017 年 3 月 npm 共有 43 萬個包)。可是這也形成了 JS 社區變態的快速迭代,你們都直呼趕不上,框架太多,選擇太多,眼花繚亂。node
下圖是 2016 年 Node.js 開發框架的發展勢頭排名(基於 Github 上 2016 年增長的 star 數)。git
關於上圖的更多細節可查看 2016 JavaScript Rising Stars。github
Tip: 能夠經過網站 npms.io 快速瞭解一個 npm 包的質量。更多如何肯定一個包的質量,能夠參考《如何挑選高質量的 Node.js 模塊?》web
下面結合上圖簡單介紹一下各個框架。數據庫
Meteor
很奇怪前面提到的 2016 JavaScript Rising Stars 竟然沒有把 Meteor 列入。Meteor 目前在 Github 上已是 star 最多的 web app 開發框架了。注意不是僅限於 JS 範圍哦。它已經超越了 Ruby 的 Rails 和 PHP 的 Laravel。(參考 Github web app frameworks Rank)。固然星星多並不能說明所有問題。Meteor 最近動做很少,多是他們團隊在忙着開發基於 GraphQL 的 Apollo 框架的緣由。(建議你們關注一下 Apollo,感受會對先後端交互帶來很大的革新)。npm
Meteor 是一個有點 ‘異類’ 的全棧框架。首先它先後端通訊使用 WebSocket 而不是 HTTP,因此實時性很好,但它不是一個 REST 框架,雖然能夠經過簡單的改造,提供 RESTful API;第二 Meteor 綁定了 MongoDB,讓喜好關係型數據庫的同窗愛不起來。不過如今 Meteor 也可使用 Apollo 和關係型數據庫交互了,比 REST 架構還方便。可是 Apollo 目前還處於開發階段。後端
Express 和 Koa
這兩個是 Node.js 最基礎的後端框架。由於太基礎,因此構建一個 app 仍須要寫不少腳手架代碼,因而在它們基礎之上出現了不少其餘框架來減小編寫這類代碼。Express 應該是裝機量最多的,而 Koa 更新一些, 使用的技術更新穎,例如 promises 和 async function,再也不有回調函數嵌套的問題了。api
Feathers.JS
Feathers.JS 構建與 Express4.0 基礎之上,Express 的那些中間件都能在 Feathers 裏直接使用。Feathers 另外特色是兼容 WebSocket 的實時性和 HTTP 的 REST。不過注意用戶鑑權默認使用 JWT,而不是傳統的 session。我以爲 JWT 更適合大一點的項目,例若有移動端須要調用 API。promise
Nodal
和 PostgreSQL 綁定。對這個框架不熟悉,感受是爲 stdlib.com 這個雲服務商定製的,比較封閉的一個框架。
KeystoneJS
KeystoneJS 是一個 CMS 框架,有點像 PHP 的Drupal,功能全面,適合作後臺管理,內容管理。自帶的用戶管理功能很方便。
LoopBack
LoopBack 是由 StrongLoop 公司基於 Express 開發的開源框架。前年被 IBM 收購了。這是一個大而全的企業級框架,適合有多種終端,還有與其餘後端服務集成的場景。這篇文章解釋了 LoopBack 爲何火不起來? 。主要觀點是由於目前大系統都仍是 Java 框架的天下,Node.js 更可能是應用在前端和中間層。
不少人把它和 hapi 比較,由於都是用來開發 RESTful API。我我的認爲 LoopBack 火不起來的緣由是它限制有點多,不像 hapi 那麼靈活,hapi 更適合當下快速迭代的開發方式。
Sails 和 Trails
從名字看應該都是向 Ruby 的 Rails 學習的 MVC 框架,以前沒有用過 Rails,因此對他們沒有太多瞭解。估計適合從 Ruby on Rails 轉過來的同窗。
hapi 和 restify
從名字能夠看出是構建 RESTful 服務的框架,適合後端是微服務的架構。兩者我的更傾向於 hapi(來自沃爾瑪團隊),這裏有一篇中文的安利 hapi 的文章。我的推薦這個框架來開發面向服務的 API。
Egg
阿里巴巴開源 (聽說不是一個 KPI 開源項目) 的 Egg.js,號稱爲企業級框架和應用而生。它有點像 Feathers,可是基於 Koa;另外不像 Feathers,Egg 沒有自帶認證功能,使用 cookie/session 鑑權。更多細節能夠看如何評價阿里開源的企業級 Node.js 框架 egg?。感受是一個不錯的企業級 Node.js 框架。理念先進,功能也全。
Gatsby 和 Hexo
靜態網站生成。適合作文檔、博客類網站。比動態 web app 加載更快。Gatsby 基於 React,比 Hexo 新,維護得更好些。
那麼,這麼多框架到底怎麼選?
關鍵仍是看你的應用場景。是須要一個單體的應用仍是微服務化?須要怎樣的認證和受權?數據庫偏好?下面說說個人淺見。
剛開始試玩 Node.js,學習 Express、Koa
若是隻是想試試並學習 Node.js 開發後端服務,建議從 Express 開始,由於它夠簡單,並且是不少其餘框架的基礎,擴展也容易。若是你對 JavaScript 的 promise 和 async 熟悉,那也能夠從 Koa 開始。
開發內容管理站點、簡單的後臺管理用 Keystone,不介意使用 MongoDB 的用 Meteor
若是你要開發一個不太複雜的內容管理應用,好比一些常常更新內容、圖片的站點,用戶權限等後臺管理等,那麼 KeystoneJS 比較合適,由於它已經內置了不少這些功能。Meteor 固然也適合。
企業應用首選 Egg
Feathers 和 Egg 都適合開發企業應用。有日誌、安全、多進程通訊的解決方案,很是便利。Feathers 中文文檔少,使用 Express 和 JWT,偏重實時交互;Egg 由阿里開發,使用 Koa,感受更適合國內的企業應用開發。
實時 web app 使用 Meteor
若是你要開發一個涉及聊天、物聯網功能的實時應用,那麼 Meteor 和 Feathers 很適合。
構建微服務 REST API 首選 hapi
若是你要開發簡單的幾個微服務後端,那麼 hapi 和 restify 合適。若是是大型的複雜應用,甚至是在現有微服務上構建,那麼 LoopBack 多是個好選擇,它能夠把不少服務 glue 到一塊兒。還能夠結合 StrongLoop 的 API 網關一塊兒使用。
靜態網站生成首選 Gatsby,不使用 React 的話用 Hexo。
最後,建議你們選擇的時候不要太糾結,差很少就好了。由於在項目開始時不可能想得面面俱到,關鍵是大的方向,快點出 MVP。根據多年來的經驗,一個項目要不是很快夭折,要不就是活到被重寫的那一天。用哪個真的不是過重要,趕忙先選一個幹起來。