【问题标题】:how to solve a ReferenceError in node js (var not defined)如何解决节点 js 中的 ReferenceError(未定义变量)
【发布时间】:2014-03-17 09:49:00
【问题描述】:

我是 javascript 新手,我可能会问一些简单的问题。我正在尝试使用 nodeJs 的 SockJS、nodeJs 和 ssh2 模块开发一个项目。

我正在尝试使用 SockJS 库的客户端代码(websockets)将消息从 Chrome 发送到 NodeJS 服务器,然后通过 ssh2 模块从 NodeJs 发送到我的树莓派。问题如下:

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)

我知道在该函数中使用 message var 可能行不通,但我无法找出解决方案。我可能缺乏一些关于函数的知识。任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: javascript node.js sockjs


    【解决方案1】:

    你的 message 变量只存在于 conn.on('data', 函数的范围内。你必须在 sockserver.on('connection' 或上面的范围内声明 message 才能在两个函数中可见.

    【讨论】:

    • 我正在尝试那个确切的东西,但我没有成功。最好的方法是在 "sockserver.on(..){" 之后声明一个名为 command 的 var,然后在 "coon.on('data',..." 中声明等于消息的命令,谢谢
    【解决方案2】:

    您正在尝试访问超出范围的message。你可以这样做将它传递给onShell:

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

    函数的参数只能在函数内部访问。

    【讨论】:

    • 这也是一个很好的答案+开发的代码,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 2016-12-07
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2016-09-12
    相关资源
    最近更新 更多