如何在Node.js中创建派生的http(s)服务器?

时间:2013-06-19 11:57:37

标签: node.js inheritance webserver

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

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

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

当然我某种程度上需要从http模块派生,但我怎么能这样做呢?显然,我没有覆盖的Http构造函数......

任何想法或提示?

2 个答案:

答案 0 :(得分:1)

我没有经过测试,但是虽然我会说你只需要:

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

正如您所看到的here,createServer函数只是一个工厂,实例化之前暴露过两行的新Server对象。

答案 1 :(得分:1)

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

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
})