Express光榮之路系列之一


  大家好,這是我第一次在博客園寫博客,因為最近在學Node.js,所以我決定寫一個系列的關於Express開發框架的文章,文章內容並不都是原創,有些部分來自於我的讀書筆記,有些部分來自於我對英語技術書的翻譯,希望這些文章能幫助到大家。閱讀這個系列的文章要求各位同學有一定Node.js基礎,最好對commonJs這個javascript模塊編寫規范有一定的了解,如果你不知道它們倆是什么,請先自行google相關知識掃清障礙吧~。廢話不多說,下面開始正文。

  什么是Express?

   Express是Node.js平台下一個輕量級的、靈活的、強大的web開發框架。輕量級是因為當你開始使用Express的之后它並沒有把各種各樣的功能都完全加載進來,這就使得它成為一個伸縮自如的框架。它只給你提供了一個web框架應該具有的基本特性,即使是它本身支持的那些特性也並非都默認可以直接調用,你可以根據自己的需求選擇相應的特性或者功能使用。

  Express框架的靈活性來源於它對中間件和Node模塊的使用,Express中間件和Node模塊都是可插拔的(就是可以根據需求選擇使用,甚至可以找到替代品)javascript組件,這就是為什么Express App具有良好的模塊化、靈活性以及可拓展性的原因。最后我們為什么說Express是一個強大的框架呢?因為Express為我們提供了操作所有核心的Node API的途徑,所以任何你可以用Node做到的事情,你也可以用Express完成,甚至可以做得更好,更快呢!

  可能光聽我講這些概念性的東西並不能幫助大家清晰地認識Express框架,下面給大家講一下Express的歷史故事吧(我一向認為學習一項技術最好的開頭就是去了解這項技術的歷史,這樣我們就能知道這項技術誕生的背景,是為了滿足什么需求而被發明出來。當我們跟隨作者的腳步見證一個框架從最初的0.0.1成長到最新的版本,自然能對它的每一個細節和本質形成感性的認識,這樣運用框架的時候就能舉重若輕了。)

  Express的故事

  那是2009年2月份發生的事情,Ryan Dahl意識到自己可以把javascript和google的V8引擎融合起來創造一個系統及的編程平台,於是他在2月份進行了大量的工作,發布了這個新平台的0.0.1版並將之命名為Node.js(Node)。Node這個平台一經發布就得到web開發者社區的青睞,隨即開始迅猛的發展並漸漸流行開來,有了Node這個平台,javascript也能進行后端開發了。然而,Node的web服務器API(Node web server API)有一些問題:這些API比較底層,開發者們得在Web  App中親手寫很多function來達到某個目的,這就導致即便是在一個大中型項目中想做到模塊化和可拓展性也很成問題。

  Node 0.0.1版發布之后5個月之內,也就是2009年6月份,T.J.Holowaychuk發布了Express這個能簡化Node平台下開發流程的開源項目。T.J.Holowaychuk搭建Express框架的靈感來源於Ruby的Sinatra框架,同時是構建在Node提供的API基礎之上的。雖然當時Express框架還略顯粗糙,但是它提供了一些令人眼前一亮的功能——比如一個路由系統、對Session和Cookie的支持、便利的MIME操作、滿足REST風格的接口以及基於HAML的模板系統等等,這些都是開發者們期待一個web開發框架該具備的功能。

  然而,0.0.1版的Express可是和今天我們使用的Express 3或者Express 4大不相同,可能唯一相同的地方是他們的名字都叫做“Express”。2010年6月,Sencha的Sencha實驗室開始鼓搗一個名為“Connect”的開源項目,用來解決Node web server API難以進行模塊化和可拓展化開發的問題。這個項目的靈感來源於Ruby的Rack Web Server接口。和Express一樣,Connect也是構建在Node提供的web server API之上,還自帶一個方便使用的用來完成HTTP相關功能的中間件系統(middleware system)。Connect的中間件系統可以實現Node下很多web app中類似的重復的功能,甚至我們我可以為自己的web app編寫一個中間件。Connect也大大提高了Node平台下開發的web app的模塊化水平和可拓展性。

  那么問題來了,學挖掘機哪家強......咳咳,開個玩笑^_^。當時Node平台下可就有2個不同的web開發框架:一個是模仿Sinatra構建的Express,另一個是模仿Rack構建的Connect。這就給web開發者們帶來不少困惑了,不管你選擇哪一個框架,總得放棄另一個框架提供的便捷性,腫么辦?這個問題就連T.J.Holowaychuk本人也感到困惑,他當時同時參與了Express和Connect兩個開源項目。

  很明顯,Connect和Express是兩個優勢互補的框架。因此,2010年7月時T.J.Holowaychuk決定重構Express框架(有技術就是任性......),改為在Connect的基礎之上構建Express框架,於是就有了煥然一新的1.0.0版的Express。Express 1.0.0版出來之后,開發者再也不用被“選擇哪個框架”這樣的問題困擾了。直到今天,Connect依然是Express的地基,任何對Connect項目的正式修改都會很快反映到Express框架中。以上就是Express的故事以及它和Connect的關系,雖然開發者們如今幾乎不直接使用Connect框架,但是在Express中會用到大量的Connect中間件,所以中間件在Express中是非常重要的。

  本篇未完待續to be continued...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM