1

TCP 経由でクライアントに REPL を提供する小さなサンプル プログラムhttp://pastebin.com/5gFkaPggがあります。ドキュメント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);
}

もっと適切な解決策があれば教えてください。

4

1 に答える 1

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

新しい名前を導入しないため、2 番目のオプションを使用したコード:

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();
于 2012-05-23T05:14:46.737 に答える