0

我正在尝试创建一个行为类似于 的函数net.createServer,除了它返回的对象是套接字周围的包装器,而不是套接字。

(这些的重点是进行自动数据转换。)

我最近的尝试看起来像:

var net = require('net');
var util = require('util');
var stream = require('stream');
var EventEmitter = process.EventEmitter;

exports.createServer = createServer;

function createServer(arg0, arg1) {
  var server;
  var netServer;
  var ocb;

  if (typeof arg1 === 'function') {
    // options, callback
    netServer = net.createServer(arg0, callback);
    ocb = arg1;
  } else if (typeof arg0 === 'function') {
    // callback
    netServer = net.createServer(callback);
    ocb = arg0;
  } else {
    // options?
    netServer = net.createServer(arg0);
    ocb = null;
  }

  server = new Server(netServer);

  function callback(socket) {
    ocb(new LiftedSocket(socket));
  };

  return server;
  ;
}

function Server(netServer) {
  this.netServer = netServer;
}
util.inherits(Server, EventEmitter);

Server.prototype.listen = function() {
  this.netServer.listen.apply(this.netServer, arguments);
}

function LiftedSocket(socket) {
  stream.Duplex(this);
  this.socket = socket;
}
util.inherits(LiftedSocket, stream.Duplex);

LiftedSocket.prototype._read = function(size) {
  console.log('_read', size);
  // transforming code goes here
  this.socket.read(size);
}
LiftedSocket.prototype._write = function(chunk, encoding, callback) {
  console.log('_write', chunk, encoding, callback);
  // transforming code goes here
  this.socket.write(chunk, callback);
}

但是当测试时(通过尝试从返回的管道LiftedSocket)它失败并出现错误,包括:

 Uncaught TypeError: Cannot read property 'pipesCount' of undefined
  at LiftedSocket.Readable.pipe (_stream_readable.js:453:16)

 Uncaught TypeError: Cannot read property 'flowing' of undefined
  at LiftedSocket.Readable.on (_stream_readable.js:691:44)

我希望在构建时我做错了什么LiftedSocket,但我想不出是什么。

4

1 回答 1

1

我错误地调用了超类构造函数。它应该是:

stream.Duplex.call(this, {})
于 2013-10-18T12:00:49.140 回答