NodeJS中间件框架Connect的一些疑问
大家好,小菜有些问题,求解答,谢谢!
最近看了NodeJS的Connect框架的代码(传送门:https://github.com/senchalabs/connect)。查看文档得知Coonect的使用方法如下:
// 由API文档明显知道,可以这样调用createServer // HTTP var server = connect.createServer( connect.logger() , connect.static(__dirname + '/public') ); // HTTPS var server = connect.createServer( { key: key, cert: cert } , connect.logger() , connect.static(__dirname + '/public') ); // 或者直接: connect( connect.logger() , connect.static(__dirname + '/public') ).listen(3000);
翻看Connect的源代码得知connect.createServer函数的实现如下:
function createServer() { function app(req, res){ app.handle(req, res); } utils.merge(app, proto); app.stack = []; return app; };
在该函数里面没有发现如何处理传入参数的实现...
继续跟踪其proto.js的实现代码,只有app.use和app.handle两个函数,并没有发现在哪里调用了...但可以很肯定connect.createServer()返回的是NodeJS核心的http lib里面的http.Server的实例。
我目前的水平就只能到这里了:)
由于暂时没有安装NodeJS的环境[ 不好意思,偶在网吧:)( ],所以请有NodeJS环境的童鞋麻烦Debug一下,能够分析一下Connect的调用过程,特别是createServer运行的过程,以及实现好的“中间件”是如何进入到connect的中间件的“大循环”里面的。
万分感谢!求NodeJS大侠出来拯救小菜!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先多谢 @gaosboy 的关心,多谢你在微博上的转发!在这里先说声真诚的谢谢...
由于我习惯git clone 某个代码仓库的最新的代码,毕竟是最新的代码好分析而且比较跟得上潮流哈.但这次我基本无语,因为我clone回来的NodeJS Connect的代码是未完成的代码,或者说是正在开发的代码....
我还真没有想过我习惯git clone最新代码这个"好习惯"也会带来这次莫名其妙的郁闷!
最后我找到1.7.1的NodeJS Connect的代码,传送门 https://github.com/senchalabs/connect... 看到/lib/connect.js里面的代码我立刻就知道我clone错版本的代码了!
非常感谢在NodeJS邮件列表上回答我问题的 @Hsu Ping Feng,你的提示很给力,深刻地让我反省了这个不看版本clone代码的错误....虽然你可能看不懂中文,在这里我还是要给你回复一个真诚的感谢!
实在是不好意思,麻烦大家的观看和回复....
谢谢大家的关注....
谢谢...
登录SF看到 @牛小腩 同学的回复...其实Js我还是很懂的,只是Clone错版本的代码啦!现在NodeJS Connect的最新的代码还是在开发中的,根本就是还没有成型的代码,难怪我看不下去了!谢谢你的见解!谢谢你!
最后谢谢大家!谢谢SF!
首先回答你一下 为什么createServer()没有参数而他的api调用仍然使用了参数...
这是一个js的基础知识..函数的参数是在函数执行前执行的..他这个写法的意思是在connect.createServer()执行前 先执行下
connect.logger()
、connect.static(__dirname + '/public')
之类的。虽说有点装逼但是很简洁..建议写成
你就更好理解了...
这个版本的代码我没看过...我的电脑上装的是1.7..我对比了下发现改动好大...个人觉得1.7那个版本略好理解一些..