nodejs模块connect源码分析
来源:互联网 发布:萨德导弹防御系统 知乎 编辑:程序博客网 时间:2024/05/14 12:03
connect(
connect.static(__dirname + '/public', { maxAge: 0 })
, function(req, res) {
res.setHeader('Content-Type', 'text/html');
res.end('<img src="/tobi.jpeg" />')
}
).listen(3000);
思路:
通过connect创建一个http|https server,提供http server的所有功能。
connect是原型继承于http server的,它会用use到的中间件替换掉server的requestListener。
通过connect.use(route, handle)来对每一个路由添加中间件,这些中间件handle会与route绑定保存在一个stack里面,每次有request请求的时候,遍历这个堆,找到对应route的handle,执行handle,如果handle最后调用了next(),就会继续寻找并执行下一个匹配的handle。
通过封装handle,可以很容易的在connect基础上添加更多的middleware。
connect.js
有一个createServer方法,可以通过connect()访问到。根据第一个参数,如果是object,就当作是https的选项,创建HTTPSServer,如果第一个参数不是object,则创建HTTPServer,所有的参数(除了https的选项)都是一个中间件handle,会在HTTPServer绑定到‘/’路径上。
HTTPSServer是在HTTPServer的基础上添加了一层,可以启用HTTPS服务。
同时,connect.js会读取middleware文件夹,把里面的中间件读取到,为他们创建getter,可以通过connect.static()访问到。
而每一个中间件文件暴露在外的函数都是返回一个handle。
http.js
HTTPServer:初始化的时候会把所有的参数当作handle存放进stack,然后以handle方法为requestListener调用http.Server方法。
HTTPServer随后会继承http.Server的原型。
use(route, handle)
把handle去除外壳之后绑定到route上面,存入stack中。
handle(req, res, next)
遍历整个stack,寻找到req.url与route匹配的元素,执行它的handle。当所有的元素都遍历完还有错误,则输出。
util.js
这是一个工具包,里面包含了用到的各种工具函数。
pause(obj)
把传递进来的obj对象的'data'和'end‘事件都保存下来,返回两个函数:end():不再保存事件。resume():停止保存并把之前保存的事件释放出去给obj再次捕获,达到暂停这个obj对象的效果。(感觉可能会有bug,如果在这里释放的时候又有'data'或者'end'事件触发会不会导致顺序变乱?)
parseCookie(str)
把str以;或者,为分隔符分开。每一个都是一个cookie键值对,然后再以=分开。去除value的引号。每个键只能被取得一次。
中间件:
router
2 app.get('/:id', middle1, middle2, cb);
3 app.post('/admin', cbpost);
4 }));
[ { fn: [Object],
path: /^\/(?:([^\/]+?))\/?$/i,
keys: [Object],
orig: '/:id',
method: 'GET' } ]
app.get('/:id/test', middle3, cb);
middleware: [ [Function], [Function] ],
keys: [ 'id' ],
method: 'GET',
params: [ id: 'ca' ] }
bodyParser
static
- nodejs模块connect源码分析
- Nodejs-模块-connect源码浅析
- nodejs模块connect分析(一)
- nodejs之connect模块
- nodejs后台文件上传模块connect-multiparty
- [QT][源码分析]QObject::connect
- [QT][源码分析]QObject::connect
- connect 端口分配源码分析
- Nodejs源码分析之assert
- Nodejs源码分析之Console
- Nodejs源码分析之Path
- SocketServer模块源码分析
- gloox代码分析1 - connect模块
- STK / Connect 模块分析与应用
- connect源码分析——基础架构
- 【Netty源码分析】客户端connect服务端过程
- Mqtt Java源码分析1 Connect
- NodeJS框架之Express4.x源码分析
- Java 遍历二叉树(前中后序)
- 7_3成员函数 有元函数 普通函数
- 在Ubuntu 12.04安装和设置Samba实现网上邻居共享
- 什么是A记录、MX记录、CNAME记录
- 数据库应用程序开发入门篇——数据库的逻辑模型
- nodejs模块connect源码分析
- 导入java项目时乱码
- 【130411坑爹扫地赛】MZ原创题目——省选之路(一)
- (译)在cocos2d里面如何拖拽精灵
- 数据库应用程序开发入门篇—— 关系数据库中的基本概念
- 关于mysql客户端软件Navicat for mysql中的索引
- [Machine Learning step by step][By jy]2.2.1 统计学习:scikit-learn库的设置和估计器对象
- 【2013Esri开发者大会精彩看点】Web APIs增强
- activity生命周期