NODEJS各種框架

來自:http://www.cnblogs.com/sandea/p/5894004.html


JavaScript 這門語言的設計雖然被很多人詬病晌块,但是因為其占據(jù)了瀏覽器而且容易上手所以廣泛流行。后來隨著 Node.js 的出現(xiàn)河质,npm 包管理帶來的強大生態(tài)更是如虎添翼(截止到 2017 年 3 月 npm 共有 43 萬個包)。但是這也造成了 JS 社區(qū)變態(tài)的快速迭代抹缕,大家都直呼趕不上,框架太多,選擇太多堕仔,眼花繚亂。

Node.js非常適用于Web開發(fā)晌区,但是現(xiàn)在無論是一個網(wǎng)站摩骨,還是Web App都已經(jīng)成為包括很多不同部分,如前端朗若、數(shù)據(jù)庫恼五、業(yè)務模塊、功能模塊等等的大型項目哭懈,使用Node.js從零開始進行Web開發(fā)灾馒,也許大中型團隊能夠 勝任,但對于個人和小型團隊來說是不現(xiàn)實的遣总。這時候框架就成為Web開發(fā)利器睬罗,對于個人開發(fā)來說幾乎是必不可少。那么如何選擇Node.jsWeb開發(fā)框架呢旭斥?

首先傅物,我們必須要弄清楚的是,我們需要的是——

程序 or 框架琉预?

程序是已經(jīng)成型的應用董饰,你需要的是為它搭建環(huán)境、添加配置圆米,然后就可以運行起來卒暂;框架則是應用的骨架,你需要為它添加數(shù)據(jù)模型娄帖、業(yè)務邏輯也祠,它才能成為應用,開始提供服務近速。

事實上诈嘿,對于Web開發(fā)來說,程序和框架的區(qū)別正越來越模糊削葱,比如幾乎婦孺皆知的Wordpress奖亚,它是一個博客程序,但它豐富的插件以及高度的 自定義能夠支持很大程度上的二次開發(fā)析砸,在這點上它比起一些PHP框架也并不遜色昔字。我個人認為,如果重心在于提供服務而不是掌握技術首繁,有WordPress 這樣的程序是沒有必要使用框架的作郭。

可惜的是陨囊,由于Nodejs還很年輕,目前還沒有WordPress這樣的程序夹攒,因此目前在Node.js開發(fā)里蜘醋,如果想做出自己想要的作品,框架是必然的選擇咏尝。如果是某些特定類型的應用压语,可以嘗試一些開源的程序,比如要用Nodejs做博客状土,有Hexo、Ghost等伺糠。

Node.js Web框架有哪些蒙谓?

Node.js里的Web框架分為API框架和Web應用框架。前者能夠開發(fā)出RESTful的API训桶,后者也能開發(fā)出RESTful API累驮,但還包括模板、渲染等為前端所準備的功能舵揭。

API框架的使用場景是為跨平臺應用提供統(tǒng)一的數(shù)據(jù)模型谤专,而渲染由前端/客戶端自行解決。目前比較知名的API框架有

restify(文檔午绳、Github置侍、NPM)

ActionHero.js(官網(wǎng)、Github拦焚、NPM)

LoopBack(官網(wǎng)蜡坊、Github、NPM)

Frisby(官網(wǎng)赎败、Github秕衙、NPM)

Fortune.js(官網(wǎng)、Github僵刮、NPM)

Web應用框架顧名思義据忘,就是為了打造Web應用所開發(fā)的框架。這里有兩種風格的Web應用框架搞糕。

一個是Sinatra風格勇吊,另一個是Rails風格。Sinatra和Rails都是Ruby語言的Web框架窍仰,后者的影響力更大也更為知名萧福。這里簡單的解釋一下兩種風格是什么意思。

Sinatra風格是指高度可配置辈赋,注重開發(fā)的自由度鲫忍。代表性的Nodejs Web框架有:

Express(官網(wǎng)膏燕、Github、NPM)TJ大神開發(fā)悟民,Node.js官方推薦

hapi(官網(wǎng)坝辫、Github、NPM)

koa.js(官網(wǎng)射亏、Github近忙、NPM)

flaliron(官網(wǎng)、Github智润、NPM)

total.js(官網(wǎng)及舍、Github、NPM)

locomotive(官網(wǎng)窟绷、Github锯玛、NPM)

Rails風格則是指不重復自己和約定優(yōu)于配置,以及嚴格遵循MVC結(jié)構(gòu)開發(fā)兼蜈。代表性的框架有:

Sails.js(官網(wǎng)攘残、Github、NPM)

geddy(官網(wǎng)为狸、Github歼郭、NPM)

CompoundJS(官網(wǎng)、Github辐棒、NPM) 原railswayjs

這兩種風格無所謂誰優(yōu)誰劣病曾,全憑使用者的偏好。

而在這兩種Web框架之外漾根,還有更大型的框架知态,即全棧框架立叛,其中的代表是MEAN负敏。

MEAN?

MEAN指MongoDB+Express+Angular.js+Node.js秘蛇,這一組合包括運行環(huán)境其做、數(shù)據(jù)庫、Web框架和前端引擎赁还。被稱為 全椦梗框架(Full-stack framework)。這其中除了Node.js之外艘策,每一個都是可替換的蹈胡,目標是創(chuàng)建從前端到后端,全部使用javascript的Web應用。

由于這一框架的完善性罚渐,有人將其稱為LAMP的接班人却汉。LAMP即PHP的典型運行環(huán)境,Linux+Apache+MySql+PHP荷并,被大量的用于各種虛擬主機上合砂。

MEAN看似龐大,但事實上要構(gòu)建完整的現(xiàn)代化Web應用源织,特別是SPA(單頁面應用)翩伪,這幾個組件都是難以缺少的,并且谈息,其中每一項幾乎都是目前 情況下的最佳選擇缘屹,因此用于學習和重頭開始打造新的Web應用是非常合適的。但由于實際業(yè)務的獨特性侠仇,很可能要替換其中的組件轻姿,比如用Mysql來替換 MongoDB,因此傅瞻,學習其中的原理和架構(gòu)踢代,打造自己的類MEAN框架也是一種選擇盲憎。

作為個人和小團隊來說嗅骄,全棧框架MEAN基本上足夠了饼疙,但目前大多數(shù)全椖缟框架還包含一項特性,那就是實時窑眯,擁有實時功能的框架我們又稱為實時框架屏积。

實時框架好嗎?

實時框架(Real-time framework)指包含了webSocket的雙向通信功能磅甩,能夠在服務器和客戶端做到實時通信的框架炊林。

服務端和客戶端自由通信的需求一直都在,但由于HTTP協(xié)議本身的局限性卷要,因此催生了Comet等變通的方法渣聚,但即使這樣也離實時相距甚遠。而當 Node.js興起后僧叉,另一個HTML5技術webSocket也漸漸成熟奕枝,人們突然發(fā)現(xiàn),實時通信一下子變得觸手可及瓶堕,于是webSocket技術在 Node.js中得到大量的應用隘道,其中最為知名的模塊就是socket.io,而各種全棧框架也紛紛加入實時特性來應對更廣闊的開發(fā)需求谭梗。

目前有代表性的實時框架有:

Meteor(官網(wǎng)忘晤、Github、NPM)

MEAN.io(官網(wǎng)默辨、Github德频、NPM)

Derby(官網(wǎng)、Github缩幸、NPM)

SocketStream(官網(wǎng)壹置、Github、NPM)

不過說實話表谊,目前能看到的實時通信的應用場景其實不多钞护,其中大多集中于聊天室、to-do爆办、實時圖表难咕、在線游戲等領域。其他領域使用實時特性不但沒必要距辆,而且是對服務器資源的浪費余佃。因此目前是否要采用實時框架,要看具體的項目而定跨算。

以上基本就是Node.js Web框架的現(xiàn)狀了爆土,相信看到這里,對于選擇何種框架讀者已經(jīng)心里有數(shù)了吧诸蚕。最后再介紹一個容易搞混的概念步势,和解釋一下我的選擇。

YEOMAN背犯?

第一次見到這個詞坏瘩,我還以為它和MEAN有什么聯(lián)系。事實上漠魏,它們是截然不同的兩個東西倔矾。YEOMAN由YO(腳手架)、grunt(構(gòu)建工具)柱锹、bower(包管理器)哪自,它代表的是一種工作流,與框架開發(fā)的思維方式完全不同奕纫。具體的介紹可見這里提陶。

YEOMAN能夠和框架達到類似的目的,都是為構(gòu)建一個Web應用做好準備匹层,但是要不要采用YEOMAN隙笆,則是見仁見智锌蓄。我個人的看法是,學習 YEOMAN本身就需要不少時間撑柔,并且有一定的學習門檻瘸爽。至少在目前,使用框架開發(fā)還是相對經(jīng)濟的铅忿,而如果以后YEOMAN這種模式推廣開來剪决,再來學習也 不遲,更何況有一定的Node.js項目經(jīng)驗之后再來學習YEOMAN要輕松很多檀训。

事實上柑潦,我還是很認可YEOMAN這種Generator+package Manager的模式的,這是因為Node.js本身崇尚微模塊的 概念峻凫,即無論是多么小的功能渗鬼,都將它們模塊化,甚至大的模塊也要拆分成小的模塊荧琼,然后通過搭積木的方式來構(gòu)建應用譬胎。這樣能夠徹底的解耦,對于不容易調(diào)試的 Javascript來說命锄,也有助于定位和修復應用中的問題堰乔。Generator就是這種理念催生下的產(chǎn)物,通過選擇不同的配置和選項脐恩,將積木搭起來镐侯。不 過對于這種模式目前大家也還處于實驗當中,不急于進行實際應用被盈。

為什么我選擇了Hackathon Starter析孽?

在我的個人項目中搭伤,使用的是Hackathon Starter只怎,一個Node.js Web應用腳手架。

我使用它的原因是怜俐,要求高度可配置身堡,同時又討厭寫一些配置的代碼,因此它對于我來說是很好的選擇拍鲤。一些全椞眩框架對我來說,封裝過多季稳,將原生的 Node.js/Express API隱藏掉了擅这,要使用還需要一定的學習成本。而Express這樣的框架又太過簡潔景鼠,在實際的項目中使用還需要大量的插件和配置仲翎,而這些在 Hackathon Starter中都已經(jīng)幫我們做好了,同時還有一些示例代碼以供學習,對于新人來說非常友好溯香,可以避免過多的挫折感鲫构。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玫坛,隨后出現(xiàn)的幾起案子结笨,更是在濱河造成了極大的恐慌,老刑警劉巖湿镀,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕吸,死亡現(xiàn)場離奇詭異,居然都是意外死亡勉痴,警方通過查閱死者的電腦和手機算途,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚀腿,“玉大人嘴瓤,你說我怎么就攤上這事±蚋疲” “怎么了廓脆?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長磁玉。 經(jīng)常有香客問我停忿,道長,這世上最難降的妖魔是什么蚊伞? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任席赂,我火速辦了婚禮,結(jié)果婚禮上时迫,老公的妹妹穿的比我還像新娘颅停。我一直安慰自己,他們只是感情好掠拳,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布癞揉。 她就那樣靜靜地躺著,像睡著了一般溺欧。 火紅的嫁衣襯著肌膚如雪喊熟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天姐刁,我揣著相機與錄音芥牌,去河邊找鬼。 笑死聂使,一個胖子當著我的面吹牛壁拉,可吹牛的內(nèi)容都是我干的拐叉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼扇商,長吁一口氣:“原來是場噩夢啊……” “哼凤瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起案铺,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蔬芥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后控汉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笔诵,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年姑子,在試婚紗的時候發(fā)現(xiàn)自己被綠了乎婿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡街佑,死狀恐怖谢翎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沐旨,我是刑警寧澤森逮,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站磁携,受9級特大地震影響褒侧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谊迄,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一闷供、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧统诺,春花似錦歪脏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怠硼。三九已至鬼贱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間香璃,已是汗流浹背这难。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葡秒,地道東北人姻乓。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓嵌溢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹋岩。 傳聞我的和親對象是個殘疾皇子赖草,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容