node.js - NodeJS中间件框架Connect的一些疑问
高洛峰
高洛峰 2017-04-17 10:58:15
[Node.js讨论组]

大家好,小菜有些问题,求解答,谢谢!

最近看了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大侠出来拯救小菜!谢谢!

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
怪我咯

首先回答你一下 为什么createServer()没有参数而他的api调用仍然使用了参数...
这是一个js的基础知识..函数的参数是在函数执行前执行的..他这个写法的意思是在connect.createServer()执行前 先执行下connect.logger()connect.static(__dirname + '/public')之类的。虽说有点装逼但是很简洁..
建议写成

connect.createServer()
       .use(connect.favicon())
       .use(connect.logger())
       .use(connect.static(__dirname + '/public'))
       .listen(3000);

你就更好理解了...

这个版本的代码我没看过...我的电脑上装的是1.7..我对比了下发现改动好大...个人觉得1.7那个版本略好理解一些..

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号