2012-05-23 97 views
1

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

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

让我知道如果有更合适的解决方案。

回答

2

错误,并签名告诉我,回调给予它的参数(code, context, file, cb)但预计它的参数(code, cb)从而context必定会cbcontext不是一个函数,产生错误。

你需要做的是改变给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(); 
+0

钉住它。 FWIW不正确的文档[已在HEAD中修复](https://github.com/joyent/node/pull/2884)。 –