Node REPL eval Callback

Ho un piccolo programma di esempio http://pastebin.com/5gFkaPgg che serve un REPL a un client su TCP. Secondo i documenti http://nodejs.org/api/repl.html, ho la funzione eval (righe 11-13) impostata correttamente, ma l’object callback non è una funzione. Cosa sto interpretando male nei documenti?

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

Non posso rispondere alla mia domanda …

Secondo https://github.com/joyent/node/blob/master/lib/repl.js la firma è

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

Fammi sapere se esiste una soluzione più appropriata.

L’errore e la firma mi dicono che il callback è stato dato come argomento (code, context, file, cb) ma era previsto come argomento (code, cb) e quindi il context era legato a cb e siccome il context non è una funzione, il errore è stato prodotto.

È necessario modificare l’elenco degli argomenti del callback assegnato a repl.start in:

 function(cmd, context, file, callback) { 

o usare il comune:

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

Codice con la seconda opzione in quanto non introduce nuovi nomi:

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