zoukankan      html  css  js  c++  java
  • 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...

  • 相关阅读:
    HDU 4278 Faulty Odometer 8进制转10进制
    hdu 4740 The Donkey of Gui Zhou bfs
    hdu 4739 Zhuge Liang's Mines 随机化
    hdu 4738 Caocao's Bridges tarjan
    Codeforces Gym 100187M M. Heaviside Function two pointer
    codeforces Gym 100187L L. Ministry of Truth 水题
    Codeforces Gym 100187K K. Perpetuum Mobile 构造
    codeforces Gym 100187J J. Deck Shuffling dfs
    codeforces Gym 100187H H. Mysterious Photos 水题
    windows服务名称不是单个单词的如何启动?
  • 原文地址:https://www.cnblogs.com/lightyears/p/4175244.html
Copyright © 2011-2022 走看看