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