在兔子洞里面 - “res”源自express和/或nodejs?

时间:2012-05-27 20:47:12

标签: javascript node.js express

我正在尝试了解更多express和nodejs内部结构。查看明确的“response.js文件,它经常为res分配几种方法,这似乎是原型。

具体而言,res被声明为res = http.ServerResponse.prototype

好的,那么http是什么? http被声明为http = require('http')

因此,查看明确的“http.js文件,我们会看到exports = module.exports = HTTPServer;

HTTPServer似乎是这种方法:

function HTTPServer(middleware){
  connect.HTTPServer.call(this, []);
  this.init(middleware);
};

这就是我被困的地方。根据我的逻辑,似乎在ServerResponse方法上调用HTTPServer,这当然没有意义。因此,我必须遗漏一些东西。

更新:

我刚才意识到express创建了一个HTTPServer实例:

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

所以我猜测实际上是在该实例上调用ServerResponse的情况?但我仍然无法找到ServerResponse ...

1 个答案:

答案 0 :(得分:2)

我在express source files中看不到任何http.js文件。

根据node.js documentation on http http = require('http')将加载http模块,其中包含ServerResponse object

因此,快速代码使用附加方法增强了ServerResponse对象。