我有一个小样本程序http://pastebin.com/5gFkaPgg,通过TCP为客户端提供REPL。根据文档http://nodejs.org/api/repl.html我通过eval函数(第11-13行)设置正确,但回调对象不是函数。我在文档中误解了什么?
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);
}
如果有更合适的解决方案,请告诉我。
答案 0 :(得分:2)
错误和签名告诉我回调是作为其参数(code, context, file, cb)
给出的,但期望它的参数(code, cb)
因此context
被绑定到cb
并且context
不是函数,错误产生了。
您需要做的是将给予repl.start
的回调的参数列表更改为:
function(cmd, context, file, callback) {
或使用common:
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();