1

我想派生 Node.js http(s) 服务器,因为我需要添加一些行为。

例如,我想拥有一个也有foobar功能的 http 服务器。所以我希望能够做这样的事情:

var server = http.createServer(function (req, res) { ... }).listen(3000);
server.foobar();

当然我需要以某种方式http模块中派生,但我怎么能这样做呢?显然没有Http我可以覆盖的构造函数......

有什么想法或提示吗?

4

2 回答 2

3

正确的方法是创建服务器的子类。

var http = require('http')

class MyServer extends http.Server {
  foobar () {
    // any code
  }
}

var server = new MyServer(function (req, res) {
  // any code
})

如果您运行的是 <1.0 的 Node.js 版本,则需要使用旧的类语法:

var http = require('http')

function MyServer (handler) {
  http.Server.call(this, handler)
}

MyServer.prototype = Object.create(http.Server.prototype)

MyServer.prototype.foobar = function () {
  // any code
}

var server = new MyServer(function (req, res) {
  // any code
})
于 2015-10-05T14:05:37.453 回答
0

我没有测试过,但是尽管我会说你只需要:

var http = require('http');
http.Server.prototype.foobar = function () {};

正如您在此处看到的,createServer 函数只不过是一个工厂,它实例化了一个新的 Server 对象,该对象之前已经暴露了两行。

于 2013-06-19T13:24:01.333 回答