首頁»NodeJS»如何選擇Node.js Web開發框架?

如何選擇Node.js Web開發框架?

來源:idlelife.org 發布時間:2014-10-12 閱讀次數:

  Node.js非常適用于Web開發,但是現在無論是一個網站,還是Web App都已經成為包括很多不同部分,如前端、數據庫、業務模塊、功能模塊等等的大型項目,使用Node.js從零開始進行Web開發,也許大中型團隊能夠勝任,但對于個人和小型團隊來說是不現實的。這時候框架就成為Web開發利器,對于個人開發來說幾乎是必不可少。那么如何選擇Node.js Web開發框架呢?

nodejs frameworks

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

  程序 or 框架?

  程序是已經成型的應用,你需要的是為它搭建環境、添加配置,然后就可以運行起來;框架則是應用的骨架,你需要為它添加數據模型、業務邏輯,它才能成為應用,開始提供服務。

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

  可惜的是,由于Nodejs還很年輕,目前還沒有WordPress這樣的程序,因此目前在Node.js開發里,如果想做出自己想要的作品,框架是必然的選擇。如果是某些特定類型的應用,可以嘗試一些開源的程序,比如要用Nodejs做博客,有Hexo、Ghost等。

  Node.js Web框架有哪些?

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

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

  Web應用框架顧名思義,就是為了打造Web應用所開發的框架。這里有兩種風格的Web應用框架。

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

  Sinatra風格是指高度可配置,注重開發的自由度。代表性的Nodejs Web框架有:

  Rails風格則是指不重復自己和約定優于配置,以及嚴格遵循MVC結構開發。代表性的框架有:

  這兩種風格無所謂誰優誰劣,全憑使用者的偏好。

  而在這兩種Web框架之外,還有更大型的框架,即全??蚣?,其中的代表是MEAN。

  MEAN?

  MEAN指MongoDB+Express+Angular.js+Node.js,這一組合包括運行環境、數據庫、Web框架和前端引擎。被稱為全??蚣埽‵ull-stack framework)。這其中除了Node.js之外,每一個都是可替換的,目標是創建從前端到后端,全部使用javascript的Web應用。

  由于這一框架的完善性,有人將其稱為LAMP的接班人。LAMP即PHP的典型運行環境,Linux+Apache+MySql+PHP,被大量的用于各種虛擬主機上。

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

  作為個人和小團隊來說,全??蚣躆EAN基本上足夠了,但目前大多數全??蚣苓€包含一項特性,那就是實時,擁有實時功能的框架我們又稱為實時框架。

  實時框架好嗎?

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

  服務端和客戶端自由通信的需求一直都在,但由于HTTP協議本身的局限性,因此催生了Comet等變通的方法,但即使這樣也離實時相距甚遠。而當Node.js興起后,另一個HTML5技術webSocket也漸漸成熟,人們突然發現,實時通信一下子變得觸手可及,于是webSocket技術在Node.js中得到大量的應用,其中最為知名的模塊就是socket.io,而各種全??蚣芤布娂娂尤雽崟r特性來應對更廣闊的開發需求。

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

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

  以上基本就是Node.js Web框架的現狀了,相信看到這里,對于選擇何種框架讀者已經心里有數了吧。最后再介紹一個容易搞混的概念,和解釋一下我的選擇。

  YEOMAN?

  第一次見到這個詞,我還以為它和MEAN有什么聯系。事實上,它們是截然不同的兩個東西。YEOMAN由YO(腳手架)、grunt(構建工具)、bower(包管理器),它代表的是一種工作流,與框架開發的思維方式完全不同。具體的介紹可見這里。

  YEOMAN能夠和框架達到類似的目的,都是為構建一個Web應用做好準備,但是要不要采用YEOMAN,則是見仁見智。我個人的看法是,學習YEOMAN本身就需要不少時間,并且有一定的學習門檻。至少在目前,使用框架開發還是相對經濟的,而如果以后YEOMAN這種模式推廣開來,再來學習也不遲,更何況有一定的Node.js項目經驗之后再來學習YEOMAN要輕松很多。

  事實上,我還是很認可YEOMAN這種Generator+package Manager的模式的,這是因為Node.js本身崇尚微模塊的概念,即無論是多么小的功能,都將它們模塊化,甚至大的模塊也要拆分成小的模塊,然后通過搭積木的方式來構建應用。這樣能夠徹底的解耦,對于不容易調試的Javascript來說,也有助于定位和修復應用中的問題。Generator就是這種理念催生下的產物,通過選擇不同的配置和選項,將積木搭起來。不過對于這種模式目前大家也還處于實驗當中,不急于進行實際應用。

  為什么我選擇了Hackathon Starter?

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

  我使用它的原因是,要求高度可配置,同時又討厭寫一些配置的代碼,因此它對于我來說是很好的選擇。一些全??蚣軐ξ襾碚f,封裝過多,將原生的Node.js/Express API隱藏掉了,要使用還需要一定的學習成本。而Express這樣的框架又太過簡潔,在實際的項目中使用還需要大量的插件和配置,而這些在Hackathon Starter中都已經幫我們做好了,同時還有一些示例代碼以供學習,對于新人來說非常友好,可以避免過多的挫折感。

  上面一段可以看做是免費為Hackathon Starter做的廣告吧,開源項目需要宣傳和布道才能讓更多人所關注。

  最后,本文里的框架大多來源于nodeframework網站,本文可以看做是該站的注釋版,在掃清我自己的一些疑惑的同時,也希望對讀者有所幫助。

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共2條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共2條評論
登錄會員中心
大发国际网址 小金县| 时尚| 临汾市| 宜昌市| 广宁县| 衡水市| 威信县| 许昌县| 安丘市| 山东| 佛山市| 自贡市| 万山特区| 都江堰市| 乐都县| 黔江区| 洛宁县| 广宗县| 合肥市| 客服| 凤庆县| 广州市| 盘锦市| 江阴市| 依兰县| 运城市| 乡城县| 洱源县| 祥云县| 阿拉善左旗| 永寿县| 焉耆| 三原县| 毕节市| 安义县| 咸宁市| 晋城| 司法| 和硕县| 乌鲁木齐县| 凤城市| 巴塘县| 孙吴县| 西充县| 建宁县| 南靖县| 新源县| 利辛县| 开江县| 沅江市| 牡丹江市| 雷州市| 思茅市| 和平区| 游戏| 阜新市| 泸水县| 陕西省| 泗水县| 沾益县| 隆尧县| 奎屯市| 高阳县| 金山区| 尚义县| 阿坝县| 马尔康县| 余姚市| 通道| 浮山县| 永丰县| 日照市| 贵定县| 灵台县| 鄄城县| 阿勒泰市| 通化县| 肃宁县| 诏安县| 惠水县| 乌兰察布市| 驻马店市| 碌曲县| 松原市| 囊谦县| 阿瓦提县| 秦皇岛市| 慈溪市| 韩城市| 鄂尔多斯市| 金山区| 乐平市| 弥渡县| 廊坊市| 安徽省| 乌兰察布市| 长汀县| 富裕县| 富宁县| 乌拉特中旗| 榆林市| 建德市| 水富县| 灵璧县| 江北区| 鄯善县| 临漳县| 额济纳旗| 苏州市| 乌审旗| 防城港市| 柘城县| 昌黎县| 新疆| 新余市| 信宜市| 乐至县| 澜沧| 陆良县| 萨嘎县| 如东县| 常德市| 赫章县| 株洲市| 河西区| 门头沟区| 普兰店市| 英吉沙县| 呈贡县| 嘉祥县| 健康| 平陆县| 科技| 麻栗坡县| 太白县| 泽库县| 阿克|