节点REPL评估callback

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

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

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

错误和签名告诉我,callback是作为它的参数(code, context, file, cb)但期望作为它的参数(code, cb) ,因此context绑定到cbcontext不是一个函数,错误产生了。

你需要做的是改变给予repl.start的callback的参数列表为:

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