狠狠撸

狠狠撸Share a Scribd company logo
Node.js中间件
Connect模块深入浅出
ericssonxiao@gmail.com
Eric.xiao
Agenda
Node.js介绍
Express框架介绍
Connect模块介绍
Demo1: 简单的服务器
Demo2: 前后台动静分离
Demo3: 前端缓存技术
Demo4: 一个山寨版的京东到家网站
Node.js 介绍
Node.js是一个基于Chrome JavaScript运行时建立的平台,
用于方便地搭建响应速度快、易于扩展的网络应用。
Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,
非常适合在分布式设备上运行的数据密集型的实时应用。
Node是一个Javascript运行环境(runtime)。实际上它是对
Google V8引擎进行了封装。V8引擎执行Javascript的速度
非常快,性能非常好。Node对一些特殊用例进行了优化,
提供了替代的API,使得V8在非浏览器环境下运行得更好。
Node.js的优点
Nodejs作为一个新兴的后台语言,有很多吸引人的地方:
RESTful API
单线程
Node.js可以在不新增额外线程的情况下,依然可以对任务进行并行处
理
Node.js是单线程的。它通过事件轮询(event loop)来实现并行操作,
对此,我们应该要充分利用这一点尽可能的避免阻塞操作,取而代之,
多使用非阻塞操作。
非阻塞IO
V8虚拟机
事件驱动
Node.js Event Loop
Express 框架
Express 框架安装使用
npm install express-generator
npm install ejs less-middleware
express –sessions –css less –ejs myapp
Express 第一次运行
Express 的版本:
4.X
3.X
如何查询当前的版本号:
Npm info express version
Hello World Server
Connect模块介绍
Connect在它的官方介
绍中,它是Node的一
个中间件框架。超过18
个捆绑的中间件和一些
精选第三方中间件。尽
管Connect可能不是性
能最好的Node.jsWeb
框架,但它却几乎是最
为流行的Web框架。
Connect模块介绍
模型简单
中间件易于组合和插拔
中间件易于定制和优化
丰富的中间件
Connect自身十分简单,其作用是基于Web服务器做中间件
管理。至于如何如何处理网络请求,这些任务通过路由分
派给管理的中间件们进行处理。它的处理模型仅仅只是一
个中间队列,进行流式处理而已,流式处理可能性能不是
最优,但是却是最易于被理解和接受。基于中间件可以自
由组合和插拔的情况,优化它十分容易。
Connect模块介绍
流式处理:
Conncet提供use方法用于注册中间件到一个Connect对象的队列中,我们称
该队列叫做中间件队列。
通过查看Conncet的部分核心代码可以知道,它通过use方法来维护一个中
间件队列。然后在请求来临的时候,依次调用队列中的中间件,直到某个中
间件不再调用下一个中间件为止。
Connect模块介绍
Connect 部分核心代码
值得注意的是,必须要有一个中间件调用 res.end() 方法来告知客户端请求已
被处理完成,否则客户端将一直处于等待状态。
流式处理也是Node.js中用于流程控制的经典模式,Connect模块是典型的应用
了它。流式处理的好处在于,每一个中间层的职责都是单一的,开发者通过这
个模式可以将复杂的业务逻辑进行分解。
Connect模块介绍
app.use()方法接受两个参数,route和fn,既路由信息和中间件函数,一个完整
的中间件,其实包含路由信息和中间件函数。
路由信息的作用是过滤不匹配的URL。请求在遇见路由信息不匹配时,直接传
递给下一个中间件处理。
中间件的优势类似于Java中的过滤器,能够全局性地处理一些事务,使得业务
逻辑保持简单。任何事物均有两面性,当你调用app.use()添加中间件的时候,
需要考虑的是中间件队列是否太长,因为每一层中间件的调用都是会降低性能
的。为了提高性能,在添加中间件的时候,如非全局需求的,尽量附带上精确
的路由信息。
Connect模块介绍
某公司node项目,目录
结构图。
Demo1: 简单的服务器
Demo2: 前后台动静分离
静态文件中间件:
利用Node.js实现一个静态文件服务器的许多技术细节,包括路由实现,
MIME,缓存控制,传输压缩,安全、欢迎页、断点续传等。
Express 4.x版本提供的静态文件中间件
Connect模块提供的静态文件中间件
动静分离:
Demo3: 前端缓存技术
前端缓存策略:
采用性能更好的缓存中间件:
Static(): Express, Connect框架都提供。
StaticCache():NPM 提供的另外一个中间件。主要用来解决将服务
器中的文件,读入内存中,然后做缓存处理的策略。主要为了解决文
件读写慢的问题。
风险分担策略:
为解决资源不足的问题,可以使用第三方提供的JS库CDN,CSS库
CDN服务器或是网站,
自建CDN服务器,集中缓存文件,缓存内容不能冗余,保证缓存算法
的高命中率。
采用Varnish这样的成熟缓存代理。
Demo4: 一个山寨版的京东到家
网站
Q&A
谢谢大家的宝贵时间!
现在是技术交流与解答时间,感谢大家的沟通。

More Related Content

What's hot (20)

SITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with WebpackSITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with Webpack
昱安 周
?
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
twMVC
?
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
twMVC
?
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
Fred Chien
?
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
twMVC
?
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式
Fred Chien
?
App house
App houseApp house
App house
Fred Chien
?
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
TechParty@UIC
?
Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹
wantingj
?
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
?
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
twMVC
?
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
twMVC
?
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
?
课题二:狈辞诲别.箩蝉那些事儿
课题二:狈辞诲别.箩蝉那些事儿课题二:狈辞诲别.箩蝉那些事儿
课题二:狈辞诲别.箩蝉那些事儿
Liu Allen
?
Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法
Philip Zheng
?
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
?
Nodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioNodejs introduce - using Socket.io
Nodejs introduce - using Socket.io
Caesar Chi
?
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
Will Huang
?
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
Will Huang
?
SITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with WebpackSITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with Webpack
昱安 周
?
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
twMVC
?
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
twMVC
?
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
Fred Chien
?
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
twMVC
?
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式
Fred Chien
?
Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹
wantingj
?
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
?
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
twMVC
?
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
twMVC
?
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
?
课题二:狈辞诲别.箩蝉那些事儿
课题二:狈辞诲别.箩蝉那些事儿课题二:狈辞诲别.箩蝉那些事儿
课题二:狈辞诲别.箩蝉那些事儿
Liu Allen
?
Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法
Philip Zheng
?
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
?
Nodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioNodejs introduce - using Socket.io
Nodejs introduce - using Socket.io
Caesar Chi
?
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
Will Huang
?
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
Will Huang
?

Similar to Node.js中间件 connect模块深入浅出 (20)

51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
Hong Cai
?
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
Xuefeng Zhang
?
闯蝉高级技巧
闯蝉高级技巧闯蝉高级技巧
闯蝉高级技巧
fool2fish
?
Meteor
MeteorMeteor
Meteor
Tencent
?
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
?
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署
Deng Peng
?
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
twMVC
?
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
twMVC
?
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasus
cnfi
?
构建基于尝补尘辫的中型网站架构
构建基于尝补尘辫的中型网站架构构建基于尝补尘辫的中型网站架构
构建基于尝补尘辫的中型网站架构
HonestQiao
?
Java 与 云计算
Java 与 云计算Java 与 云计算
Java 与 云计算
kevin huang
?
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
banq jdon
?
云计算可信评估方法研究
云计算可信评估方法研究云计算可信评估方法研究
云计算可信评估方法研究
iamafan
?
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
Wade Huang
?
狈辞诲别箩蝉部门分享
狈辞诲别箩蝉部门分享狈辞诲别箩蝉部门分享
狈辞诲别箩蝉部门分享
zffl
?
深入浅出狈辞诲别.闯厂
深入浅出狈辞诲别.闯厂深入浅出狈辞诲别.闯厂
深入浅出狈辞诲别.闯厂
國昭 張
?
钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具
钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具
钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具
taobao.com
?
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
Simen Li
?
1 docker风起云ppt v1
1 docker风起云ppt v11 docker风起云ppt v1
1 docker风起云ppt v1
Jiang Shang
?
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
Hong Cai
?
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
Xuefeng Zhang
?
闯蝉高级技巧
闯蝉高级技巧闯蝉高级技巧
闯蝉高级技巧
fool2fish
?
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
?
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署
Deng Peng
?
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
twMVC
?
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
twMVC
?
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasus
cnfi
?
构建基于尝补尘辫的中型网站架构
构建基于尝补尘辫的中型网站架构构建基于尝补尘辫的中型网站架构
构建基于尝补尘辫的中型网站架构
HonestQiao
?
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
banq jdon
?
云计算可信评估方法研究
云计算可信评估方法研究云计算可信评估方法研究
云计算可信评估方法研究
iamafan
?
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
Wade Huang
?
狈辞诲别箩蝉部门分享
狈辞诲别箩蝉部门分享狈辞诲别箩蝉部门分享
狈辞诲别箩蝉部门分享
zffl
?
深入浅出狈辞诲别.闯厂
深入浅出狈辞诲别.闯厂深入浅出狈辞诲别.闯厂
深入浅出狈辞诲别.闯厂
國昭 張
?
钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具
钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具
钱宝坤:多浏览器集成的闯补惫补厂肠谤颈辫迟单元测试工具
taobao.com
?
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
Simen Li
?
1 docker风起云ppt v1
1 docker风起云ppt v11 docker风起云ppt v1
1 docker风起云ppt v1
Jiang Shang
?

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