为了账号安全,请及时绑定邮箱和手机立即绑定

在该函数里面没有发现如何处理传入参数的实现...

在该函数里面没有发现如何处理传入参数的实现...

神不在的星期二 2023-04-04 22:18:07
最近看了NodeJS的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大侠出来拯救我啊!谢谢!
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

function createServer() {          if ('object' == typeof arguments[0]) {            return new HTTPSServer(arguments[0], 
    `        `Array.prototype.slice.call(arguments, 1)
            );
          } else {            return new HTTPServer(              Array.prototype.slice.call(arguments)
            );
          }
        };


查看完整回答
反对 回复 2023-04-07
?
PIPIONE

TA贡献1829条经验 获得超9个赞

首先回答你一下 为什么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);

你就更好理解了...


查看完整回答
反对 回复 2023-04-07
  • 2 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信