2012-05-23 96 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)。 –