节点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
绑定到cb
和context
不是一个函数,错误产生了。
你需要做的是改变给予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();