十個最適合 Web 和 APP 開發(fā)的 NodeJS 框架
在瀏覽器以外運行 JavaScript 對于 JavaScript 愛好者來說非常神奇,同時也肯定是 web 應(yīng)用程序開發(fā)界***的進步之一。全球各地的開發(fā)者張開雙臂擁抱 NodeJS。
對于新手來說,Node.js 是 JavaScript 運行時,允許你在瀏覽器之外服務(wù)器上運行 JavaScript 代碼。它是基于谷歌 Chrome 的 V8 虛擬機引擎建立的,V8 虛擬機引擎用于在 Chrome 瀏覽器中支持 JavaScript。
NodeJS 逐漸普及的步伐是因為它可以讓你只使用 JavaScript 就可以建立大規(guī)模、實時性、可擴展的移動和 Web 應(yīng)用程序。
隨著節(jié)點生態(tài)系統(tǒng)的增長,框架也開始著手加快工作流程。有許多的 Node.js 框架,允許你構(gòu)建實時的端到端網(wǎng)絡(luò)應(yīng)用,而無需任何其他第三方 Web 服務(wù)器、應(yīng)用服務(wù)器、工具和技術(shù)。
通用性的 Node 框架就像快遞,Koa 和 Hapi 更加靈活,讓你做你想要的一切,***限度的滿足開發(fā)需求。但是,在最初你需要投入更多的努力,更加依靠開發(fā)者作出正確的決策。
而另一方面,像 Mean.io,Meteor, Derby 和 Mojito,有自己的標(biāo)準(zhǔn)結(jié)構(gòu)和技術(shù)體系,靈活性較差。然而這些框架不會給開發(fā)者太多做錯誤決策的空間。
讓我們來看看目前可用的***、***大的 NodeJS 框架,并幫助你建立實時的、各種規(guī)模和復(fù)雜性的可擴展 Web 應(yīng)用程序。
1. Node.js Express
對于一個已經(jīng)在使用 node.js 的開發(fā)人員來說,Express 或者"node.js express"并不是一個新鮮事。Express 框架提供了對 node.js 原生 API 的比較好的封裝,從而使開發(fā)者更加容易地使用node.js。
Express 框架提供了用來開發(fā)強壯的 web/移動應(yīng)用,以及 API 的所有功能。并且開發(fā)人員還能夠方便地為它開發(fā)插件和擴展,從而增加 Express 的能力。下面列出了一些 Express 提供的基本的功能:
- 可以和任何的第三方數(shù)據(jù)庫進行通訊;
- 可以使用任何的用戶認(rèn)證方式;
- 可以使用任何符合 Express 接口定義的模板引擎;
- 可以按照需要定義工程目錄。
通過使用 Node Express,你可以使用更少的代碼來實現(xiàn)功能。至少通過使用 Node Express,你可以實現(xiàn)中間件來響應(yīng) http 請求,可以定義路由表來定義對不同請求的響應(yīng)函數(shù),還可以使用模板引擎來輸出 html 頁面。
對于一個 NodeJS 開發(fā)新手來說,Express 還提供了如下的好處:
- Express的學(xué)習(xí)曲線并不陡峭,可以很快上手;
- Express 有非常龐大的社區(qū),和組織良好的文檔,新手可以很容易得到所需要的一切。
Express 根據(jù) MIT 協(xié)議進行開源,目前 StrongLoop 對它提供支持。你也可以通過 Express 的官方網(wǎng)站 expressjs.com 獲得更多的信息。
2. Sails.js (node.js mvc)
Sails 作為一個非常穩(wěn)固的 nodejs 框架,提供了建立任何規(guī)模的 web 應(yīng)用所需要的所有功能功能。
Sails.js 在底層使用了 express框架來提供對 http 請求的處理,同時使用 Socket.IO 框架來處理WebSocket 請求。同時作為一個前端應(yīng)用開發(fā)框架,它允許開發(fā)人員選擇他/她熟悉的技術(shù)來開發(fā)應(yīng)用。
同時 Sails.js 也通過 waterline 框架實現(xiàn)了 ORM 功能。通過這個功能,你的應(yīng)用程序可以在不進行大的修改的前提下,就可以從一個后端數(shù)據(jù)庫,切換到另外一個后端數(shù)據(jù)庫(也可以是一個NoSQL數(shù)據(jù)庫)。
Sails 特別適合用來開發(fā)對數(shù)據(jù)的實時更新有較高要求的應(yīng)用,比如多人棋類游戲,單頁web應(yīng)用等等。如果你對 Ruby, Django 或者 Zend 有一定的了解,那么你將非常容易理解Sail中的概念。
簡單來說,Sails.js 既給開發(fā)者提供了一個優(yōu)秀的 MVC 框架,也提供了一定的靈活性,讓開發(fā)者可以自主選擇前端開發(fā)方式和后端的數(shù)據(jù)庫。 Sails.js 是由 Mike McNeil 創(chuàng)建的,現(xiàn)在由 Treeline and balderdash 提供支持。Sails.js 在 MIT 協(xié)議下開源。
你可以在網(wǎng)站 sailsjs.org 上找到更多關(guān)于這個框架的內(nèi)容。
3. KOA
KOA 是 node.js mvc 框架的后起之秀,在2013第四個季度才發(fā)布了***個版本。開發(fā) KOA 的人員基本來自 Express 開發(fā)團隊,TJ Holowaychuk 是 KOA 開發(fā)團隊的***。雖然 KOA 大部分開發(fā)人員來自 Express,但是他們使用了完全不同的技術(shù)來開發(fā) KOA,并且 KOA 正成為 Express 一個強有力的競爭對手。
KOA 框架的核心是 ES6 的 generator。KOA 使用 generator 來實現(xiàn)中間件的流程控制,使用try/catch 來增強異常處理,同時在 KOA 框架中你再也看不到復(fù)雜的 callback 回調(diào)了。
KOA 框架本身非常小,只打包了一些必要的功能,但是它本身通過良好的模塊化組織,讓開發(fā)人員可以按照自己的想法來實現(xiàn)一個擴展性非常好的應(yīng)用。
許多 JavaScript/Node.js 的忠實開發(fā)者都開始選擇使用 KOA 來開發(fā)新的項目,因為 KOA 提供了更多的靈活性開發(fā)應(yīng)用程序。
你可以通過koajs.com獲取更多的信息。
4. Meteor
Meteor 框架是 Node.js 上最出色的全棧框架。項目在 GitHub 上有 28K+ 的贊,擁有大量的自定義包,龐大的社區(qū)支持,非常好的教程和文檔。在這個領(lǐng)域 Meteor 毫無疑問是王者,你可以用它構(gòu)建純 Javascript 的實時 Web 和 手機應(yīng)用。
Meteor ***秀的部分是,無論是服務(wù)器端的數(shù)據(jù)庫訪問,商業(yè)邏輯實現(xiàn),還是客戶端的展示,所有的流程都是無縫連接,開箱即用。整個框架使用統(tǒng)一的 API,Meteor API 同時適用于客戶端和服務(wù)器端。
它使用的 DDP 協(xié)議可以讓你在后端連接簡單的數(shù)據(jù)庫服務(wù)、企業(yè)數(shù)據(jù)倉庫、甚至 IOT 傳感器。Meteor 帶有自己默認(rèn)的棧,但又有足夠的靈活性,可以讓你選擇自己的技術(shù)方案。如果你不需要嘗試其他的框架或者沒有其他的條件限制,你可以直接使用默認(rèn)配置,進行快速地應(yīng)用開發(fā)。
Meteor 擁有專業(yè)化的開發(fā)團隊,***風(fēng)投的大量資金支持,這都讓 Meteor 能夠時刻保持業(yè)界領(lǐng)先。
你可以通過 meteor.com 網(wǎng)站進一步了解 Meteor。
5. Derby.js
Derby.JS 跟它的直接競爭對手 Meteor、Mean.io、以及 Mojito 一樣,也是一個全棧框架。它運行在 Nodejs + mongo + Redis 的上層。Derby 主要部分是一個叫做 Racer 的數(shù)據(jù)同步引擎,它能夠讓數(shù)據(jù)在數(shù)據(jù)庫、服務(wù)器和瀏覽器之間的同步變得輕而易舉。
Racer 的確能夠讓基于 Derby 框架的應(yīng)用運行地更快,無論是在瀏覽器端還是服務(wù)器端,對于單頁面應(yīng)用來說,它都是一個***的選擇方案。Derby 經(jīng)常被用來和業(yè)界老大 Meteor 進行比較,Meteor 項目已經(jīng)開發(fā)了一段很長時間,因而能夠提供更多的開箱即用的功能,使得在更短時間內(nèi)開發(fā)復(fù)雜的 web 應(yīng)用變得更加容易。
而 Derby 更適合于需要更快運行速度的應(yīng)用,并且它的模塊化方式能夠讓應(yīng)用更靈活,更容易擴展。Derby 最近的發(fā)展有些緩慢,但它并沒有出局,仍有改寫 Nodejs 全??蚣苡螒蛞?guī)則的潛力。
你可以通過 derbyjs.com網(wǎng)站進一步了解 Derby。
6. Flatiron.js (Node.js MVC 框架)
Flatiron 框架背后的核心思想是讓你能使用它所提供的組件以及一些第三方庫構(gòu)建你自己的全??蚣?。很酷不是嗎?我個人十分的喜歡這種方式。然而,這帶來的是更高的復(fù)雜度,并有可能會被使用錯誤組件的開發(fā)者搞得一團糟。
你能稱之為一個由多個相互獨立的組件松散地組建起來的全棧 MVC 框架。Flatiron 框架支持Director,一個從頭到腳都使用JavaScript 搭建起來的,并不需要任何依賴項的 URL 路由組件。
通過一個叫 Plates 的模板引擎,F(xiàn)latiron 能夠支持模版語言,然而數(shù)據(jù)管理是通過 json 實現(xiàn)的,并能與任何一種數(shù)據(jù)庫一起使用。Flatiron 現(xiàn)在由 Nodejitsu 以及其他的社區(qū)成員在進行維護,并做的相當(dāng)不錯,是一個不那么流行卻值得一看的框架。
你能在 flatironjs.org 上獲得更多信息。
7. Hapi
Hapi 是為數(shù)不多的不依賴于 Express 的 node.js 框架,現(xiàn)在甚至已經(jīng)完全獨立于 Express 了。在最近一段時間中,很多開發(fā)者選擇了 Hapi 而非 Express,這使得它或多或少變?yōu)榱?Express 的競爭對手。
Hapi 在眾多 nodejs 的框架中并非一個老牌選手,然而它卻成功的在這當(dāng)中創(chuàng)造了自己的一個生態(tài)圈。Hapi 致力于完全的分離 node HTTP 服務(wù)器、路由以及業(yè)務(wù)邏輯,并更多的聚焦于如何盡可能的通過配置而非代碼來控制東西。
Hapi 最初是由 Eran Hammer 以及在 Walmart labs 的團隊為了工作需要開發(fā)的。其后便以極快的速度受到了歡迎,現(xiàn)在已在 MIT 許可下成為一個開源的框架,能夠免費的被下載和使用。
迪士尼、雅虎、Pebble、beats 音樂以及 Walmart 這樣的公司都在使用 HAPI 作為他們旗下一個或多個項目的網(wǎng)絡(luò)應(yīng)用框架,它的影響力便可見一斑了。
你能在 hapijs.com上找到更多關(guān)于 Hapi 的信息。
8. Mean.IO
Mean 是 Mongo DB,Express,Angular 和 Node.js 捆綁在一起的組合。基本上說只要有它,你就擁有了數(shù)據(jù)庫層,服務(wù)器端和網(wǎng)頁前端的整套工具,足以開發(fā)所有類型的現(xiàn)代網(wǎng)絡(luò)應(yīng)用。
Mean 是一個完整獨立的包,它涵蓋了應(yīng)用開發(fā)的所有方面。尤其適合于那些需要快速開始開發(fā)的人。它內(nèi)置多種技術(shù)而且在聯(lián)合使用時變現(xiàn)非常好??梢杂糜趧?chuàng)建任意大小和復(fù)雜度的應(yīng)用。
使用 Mean,開發(fā)者可以避免經(jīng)歷混合和匹配不同的技術(shù)棧。通過 mean 棧,你可以減少安裝和配置MongoDB,Express,Angular 和 Node.js需要的時間。Mean.io 的另一個巨大好處就是所有的棧都使用 JavaScript,服務(wù)器端 Express 對MongoDB 的訪問(json)和通多 Angular 從 Node 到客戶端。
在這里 - mean.io了解更多Mean.io的相關(guān)信息。
還有一個名為 mean.js 的 mean 分支也相當(dāng)流行。
9. Mojito
Mojito 由 Yahoo 開發(fā)并迅速取得成功。然而很快又帶著關(guān)于框架的***的成功坐到了冷板凳,就像Meteor 和 Mean stack 那樣。
Mojito 同樣是一個 MVC 應(yīng)用框架,非常適合于創(chuàng)建使用 HTML5,JavaScript 和 CSS3 的高性能的網(wǎng)絡(luò)和手機應(yīng)用。Mojito 的根本目標(biāo)是提供一個框架,該框架用于構(gòu)建標(biāo)準(zhǔn)的基于跨平臺的應(yīng)用。使之可以同時運行在客戶端和服務(wù)器端,并實現(xiàn)高性能。
你可以在 Yahoo 開發(fā)者網(wǎng)頁—— mojito 獲得更多信息。
10. Socket Stream
SocketStream 是一個有趣的框架,專注于客戶端和服務(wù)端數(shù)據(jù)的快速同步,它致力于前后端數(shù)據(jù)的實時更新。
它***的特點是不嚴(yán)格要求你使用指定的客戶端技術(shù),也不限定數(shù)據(jù)庫的 ORM。我趨向于將它和有同樣功能的兄弟項目 Sail.js 做比較,它更適合做單頁 web 應(yīng)用,多用戶游戲,聊天客戶端,網(wǎng)絡(luò)應(yīng)用,交易平臺以及所有的需要將數(shù)據(jù)從服務(wù)端實時推送到客戶端的應(yīng)用。
服務(wù)端和客戶端使用 JSON 來傳輸數(shù)據(jù),比較理想的是使用 websockets 在服務(wù)端事件發(fā)生時自動將數(shù)據(jù)推送到客戶端,Socket stream 是由 Owen Barnes 創(chuàng)建,現(xiàn)在由 Paul Jensen 和團隊維護,他們的工作讓這個框架得到了應(yīng)有的榮耀。
SocketStream framework 在最近幾月獲得了很好的發(fā)展,未來一片光明。
更多 SocketStream 信息請瀏覽 github 上的 - socketstream。
其它類似優(yōu)秀框架還有:total.js, Geddy.JS, Locomotive, compound 和 Restify。
結(jié)論
Web 和應(yīng)用開發(fā)的風(fēng)景變化是非常快速的,開發(fā)人員轉(zhuǎn)向快速框架和清潔項目交付(clean project delivery)。使用 node 框架的***優(yōu)勢是提供了高層級結(jié)構(gòu)的盒子,你可以關(guān)注擴展您的應(yīng)用程序而不是努力在建設(shè)上支出。
框架提供了多樣的特性,工作在不同的底層,試圖解決構(gòu)建實時的常見問題,并解決了可伸縮的和復(fù)雜的 Web 應(yīng)用程序在速度上的問題。在這篇文章里討論的框架是當(dāng)今市場上***的 node.js 框架。