1

我有一个小型示例程序http://pastebin.com/5gFkaPgg通过 TCP 向客户端提供 REPL。根据文档http://nodejs.org/api/repl.html我正确设置了 eval 函数(第 11-13 行),但回调对象不是函数。我在文档中误解了什么?

  callback(null,result);
  ^
TypeError: object is not a function

无法回答我自己的问题...

根据https://github.com/joyent/node/blob/master/lib/repl.js 签名是

function(code, context, file, cb) {
  //code
  cb(err, result);
}

让我知道是否有更合适的解决方案。

4

1 回答 1

2

错误和签名告诉我回调是作为它的参数给出的,(code, context, file, cb)但作为它的参数是预期的(code, cb),因此context被绑定到cb并且context不是一个函数,所以产生了错误。

您需要做的是将回调的参数列表更改repl.start为:

function(cmd, context, file, callback) {

或使用常见的:

function(cmd) {
  var callback = arguments[arguments.length-1]; // get the last argument

带有第二个选项的代码,因为它没有引入新名称:

var net = require('net');
var repl = require('repl');

function main() {
  var clients = [];

  net.createServer(function(socket) {
    clients.push(socket);

    repl.start(">", socket, function(cmd) {
      var callback = arguments[arguments.length-1];
      var result = cmd;

      callback(null,result);
    });
    socket.on('end',function() {
      clients.splice(clients.indexOf(socket));
    });
  }).listen(8000);
}

main();
于 2012-05-23T05:14:46.737 回答