节点switch-case命令在循环中运行

时间:2017-11-08 13:58:15

标签: javascript

我使用以下代码管理我的服务器(安装,重新安装,重启,关机等......)

/* SERVER - type */
switch(server.type) {
    /* INFO - server */
    case 1:
       /* MANAGE - ssh login */
       conn.on('ready', function() {
           /* MANAGE - info */
           conn.exec('uptime && cat /proc/cpuinfo', function(err, stream) {
               stream.on('close',function(code, signal) {
                    /* MANAGE - info */
                    console.log('server info closed...');
                    conn.end();
                }).on('data', function(data) {
                    console.log('server info...'+data);
                    conn.end();
                }).on('error', function(err) {
                    console.log('server error...'+err);
                    conn.end();
                })
            })
        }).connect({
                host: '192.168.1.1',
                port: '22',
                username: 'root',
                password: 'myserverpass'
        })
    })
    break;
}

问题是当这个exeuctes我从console.log得到正确的数据并且在我获得数据后它继续从开始执行循环所以我只需要只获得一次:

console.log('server info...'+blablabla);

我明白了:

console.log('server info...'+blablabla);
console.log('server info...'+blablabla);
console.log('server info...'+blablabla);
console.log('server info...'+blablabla);
console.log('server info...'+blablabla);

那么当命令成功执行以便命令不进入循环时,如何从switch退出?

我使用它在节点上通过SSH连接:

https://github.com/mscdex/ssh2

我有使用switch case语句并且没有问题在循环中执行...我认为ssh2需要返回或conn.end()事件从循环中退出?

1 个答案:

答案 0 :(得分:1)

切换案例不要自行循环。所以你的switch case必须在一个循环中,导致它运行多次。由于代码循环,如果任何情况匹配,那么每个循环都将触发这些情况。

您最好的选择是将您的连接置于一个函数中并仅在尚未建立连接的情况下在其中调用它。这样你就可以有一个简单的脚本来处理连接,你所要做的就是将连接参数传递给函数。