0

私はおそらく簡単なことを求めているので、JavaScriptを初めて使用します。SockJS、nodeJs、およびnodeJsのssh2モジュールを使用してプロジェクトを開発しようとしています。

SockJS ライブラリのクライアント側コード (websockets) を使用して Chrome から NodeJS サーバーにメッセージを送信し、次に NodeJs から ssh2 モジュール経由でラズベリー pi にメッセージを送信しようとしています。問題は次のものです。

var http = require('http');
var sockjs = require('sockjs');
var Connection = require('ssh2');

var c = new Connection();
var sockserver = sockjs.createServer();


var server = http.createServer();
sockserver.installHandlers(server, {prefix:'/socksvr'});
server.listen(9999, '0.0.0.0');

sockserver.on('connection', function(conn) {

    c.connect({
        // Parameters to connect
    });

    //Here goes some code to check that the connection was successful

    conn.on('data', function(message) { 
    //this is when Node receives data from client socket

        //print somethings
        c.shell(onShell); // This is to send command from node to Raspberry Pi

    });

    //Here goes the problem 

    var onShell = function(err, stream) { 
        if (err != null) {
            console.log('error: ' + err);
        }

        stream.on('data', function(data, extended) {
            if (extended === 'stderr'){
                console.log('STDERR: '+data);
                conn.write(data);
            }else{
                if(data != ''){
                    console.log(':' + data);
                    conn.write(':' + data);
                }
            };        
        });

        stream.write(message);

    }

}); 

\server.js:62
stream.write(message);
             ^
ReferenceError: message is not defined
at onShell (C:\Documents and Settings\...\server.js:62:18)
at C:\Documents and Settings\...\node_modules\ssh2\lib\Channel.js:277:5
at Parser.<anonymous> (C:\Documents and Settings\...\node_modules\ssh2\l
ib\Channel.js:123:30)
at Parser.EventEmitter.emit (events.js:92:17)
at Parser.parsePacket (C:\Documents and Settings\...\node_modules\ssh2\l
ib\Parser.js:594:12)
at Parser.execute (C:\Documents and Settings\...\node_modules\ssh2\lib\P
arser.js:238:14)
at Socket.<anonymous> (C:\Documents and Settings\...\node_modules\ssh2\l
ib\Connection.js:488:18)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:746:14)
at Socket.EventEmitter.emit (events.js:92:17)

その関数内でメッセージvarを使用してもおそらくうまくいかないことはわかっていましたが、解決策を見つけることができませんでした。私はおそらく機能についての知識が不足しています。どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

1

message範囲外でアクセスしようとしています。に渡すためにこれを行うことができますonShell

conn.on('data', function(message) { 
    c.shell(function (err, stream) {
        onShell(err, stream, message);
    });
});

var onShell = function(err, stream, message) { 
// Etc...

関数の引数は、関数内でのみアクセスできます。

于 2014-03-17T10:23:38.510 に答える