0

我试图了解更多的 express 和 nodejs 内部结构。查看 expressresponse.js文件,它经常为 分配几个方法res,这似乎是一个原型。

具体来说,res被声明为res = http.ServerResponse.prototype

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

所以查看 expresshttp.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...

4

1 回答 1

2

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

根据关于 http 的 node.js 文档 http = require('http')将加载具有ServerResponseobject的 http 模块。

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

于 2012-05-27T20:55:21.770 回答