node.js中间件 connect模块深入浅出

20
Node.js 中中中 Connect 中中中中中中 [email protected] Eric.xiao

Upload: eric-xiao

Post on 16-Feb-2017

328 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Node.js中间件 connect模块深入浅出

Node.js 中间件Connect 模块深入浅出

[email protected]

Page 2: Node.js中间件 connect模块深入浅出

AgendaNode.js 介绍Express 框架介绍Connect 模块介绍Demo1: 简单的服务器Demo2: 前后台动静分离Demo3: 前端缓存技术Demo4: 一个山寨版的京东到家网站

Page 3: Node.js中间件 connect模块深入浅出

Node.js 介绍Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。Node 是一个 Javascript 运行环境 (runtime) 。实际上它是对 Google V8 引擎进行了封装。 V8 引擎执行Javascript 的速度非常快,性能非常好。 Node 对一些特殊用例进行了优化,提供了替代的 API ,使得 V8 在非浏览器环境下运行得更好。

Page 4: Node.js中间件 connect模块深入浅出

Node.js 的优点Nodejs 作为一个新兴的后台语言,有很多吸引人的地方:

RESTful API单线程Node.js 可以在不新增额外线程的情况下,依然可以对任务进行并行处理Node.js 是单线程的。它通过事件轮询( event loop )来实现并行操作,对此,我们应该要充分利用这一点尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。非阻塞 IOV8 虚拟机事件驱动

Page 5: Node.js中间件 connect模块深入浅出

Node.js Event Loop

Page 6: Node.js中间件 connect模块深入浅出

Express 框架

Page 7: Node.js中间件 connect模块深入浅出

Express 框架安装使用npm install express-generatornpm install ejs less-middlewareexpress –sessions –css less –ejs myapp

Page 8: Node.js中间件 connect模块深入浅出

Express 第一次运行Express 的版本:4.X3.X

如何查询当前的版本号:Npm info express version

Page 9: Node.js中间件 connect模块深入浅出

Hello World Server

Page 10: Node.js中间件 connect模块深入浅出

Connect 模块介绍Connect 在它的官方介绍中,它是 Node 的一个中间件框架。超过18 个捆绑的中间件和一些精选第三方中间件。尽管 Connect 可能不是性能最好的Node.jsWeb 框架,但它却几乎是最为流行的Web 框架。

Page 11: Node.js中间件 connect模块深入浅出

Connect 模块介绍模型简单中间件易于组合和插拔中间件易于定制和优化丰富的中间件Connect 自身十分简单,其作用是基于 Web 服务器做中间件管理。至于如何如何处理网络请求,这些任务通过路由分派给管理的中间件们进行处理。它的处理模型仅仅只是一个中间队列,进行流式处理而已,流式处理可能性能不是最优,但是却是最易于被理解和接受。基于中间件可以自由组合和插拔的情况,优化它十分容易。

Page 12: Node.js中间件 connect模块深入浅出

Connect 模块介绍流式处理:

Conncet 提供 use 方法用于注册中间件到一个 Connect 对象的队列中,我们称该队列叫做中间件队列。通过查看 Conncet 的部分核心代码可以知道,它通过 use 方法来维护一个中间件队列。然后在请求来临的时候,依次调用队列中的中间件,直到某个中间件不再调用下一个中间件为止。

Page 13: Node.js中间件 connect模块深入浅出

Connect 模块介绍Connect 部分核心代码

值得注意的是,必须要有一个中间件调用 res.end() 方法来告知客户端请求已被处理完成,否则客户端将一直处于等待状态。流式处理也是 Node.js 中用于流程控制的经典模式, Connect 模块是典型的应用了它。流式处理的好处在于,每一个中间层的职责都是单一的,开发者通过这个模式可以将复杂的业务逻辑进行分解。

Page 14: Node.js中间件 connect模块深入浅出

Connect 模块介绍

app.use() 方法接受两个参数, route 和 fn ,既路由信息和中间件函数,一个完整的中间件,其实包含路由信息和中间件函数。路由信息的作用是过滤不匹配的 URL 。请求在遇见路由信息不匹配时,直接传递给下一个中间件处理。中间件的优势类似于 Java 中的过滤器,能够全局性地处理一些事务,使得业务逻辑保持简单。任何事物均有两面性,当你调用 app.use()添加中间件的时候,需要考虑的是中间件队列是否太长,因为每一层中间件的调用都是会降低性能的。为了提高性能,在添加中间件的时候,如非全局需求的,尽量附带上精确的路由信息。

Page 15: Node.js中间件 connect模块深入浅出

Connect 模块介绍某公司 node项目,目录结构图。

Page 16: Node.js中间件 connect模块深入浅出

Demo1: 简单的服务器

Page 17: Node.js中间件 connect模块深入浅出

Demo2: 前后台动静分离静态文件中间件:

利用 Node.js 实现一个静态文件服务器的许多技术细节,包括路由实现, MIME ,缓存控制,传输压缩,安全、欢迎页、断点续传等。Express 4.x 版本提供的静态文件中间件Connect 模块提供的静态文件中间件

动静分离:

Page 18: Node.js中间件 connect模块深入浅出

Demo3: 前端缓存技术前端缓存策略:

采用性能更好的缓存中间件:Static(): Express, Connect 框架都提供。StaticCache() : NPM 提供的另外一个中间件。主要用来解决将服务器中的文件,读入内存中,然后做缓存处理的策略。主要为了解决文件读写慢的问题。

风险分担策略:为解决资源不足的问题,可以使用第三方提供的 JS库 CDN , CSS库CDN 服务器或是网站,自建 CDN 服务器,集中缓存文件,缓存内容不能冗余,保证缓存算法的高命中率。采用 Varnish 这样的成熟缓存代理。

Page 19: Node.js中间件 connect模块深入浅出

Demo4: 一个山寨版的京东到家网站

Page 20: Node.js中间件 connect模块深入浅出

Q&A谢谢大家的宝贵时间!现在是技术交流与解答时间,感谢大家的沟通。