要显示用户发送作业到群集我有以下代码(简化)当快递+ SSH2不会重置我的数据结构:节点JS:加载网页
var split = require('split');
var Client = require('ssh2').Client;
var conn = new Client();
var globalRes;
var table = [["Head_1","Head_2"]];
module.exports = {
renderTable: function(req, res) {
conn.connect({host: 'xx.xx.xx.xx', port: 22, username: 'xxxxx', password: 'xxxxx'});
globalRes = res;
table = [["Head_1","Head_2"]];
conn.on('ready', function() { conn.shell(doSomething);});
}
}
function doSomething(err, stream) {
stream.on('close', function() {
conn.end();
globalRes.render('index', { HTMLtable: table });
console.log(table);
});
stream.pipe(split()).on('data', buildTable);
stream.write('qstat -s z\n');
stream.end('exit\n');
}
function buildTable(line) {
var newLine = [1, 2];
if(line.substring(0,6) == "job-ID") {
table.push(newLine);
}
return;
}
它打开一个ssh连接,接收到数据后呈现该页面。
问题:仅在第一次它执行权,在我们的例子CONSOLE.LOG所示:
[[ 'Head_1', 'Head_2'],[1,2]] < < <这是好的。
但是从第一次开始,每次页面加载时,代码就会堆栈在'表'数据结构上。换句话说,如果我们第二次重新加载页面(或在另一个浏览器中首次加载相同页面)console.log显示:
[['Head_1','Head_2'],[1,2 ],[1,2]]
[[ 'Head_1', 'Head_2'],[1,2],[1,2]]
所以,不仅 '表' 是越来越额外行[1,2](它不应该),但命令console.log执行两次。
如果加载页面,第三次,现在我们得到:
[ 'Head_1', 'Head_2'],[1,2],[1,2],[1,2]
[[ 'Head_1', 'Head_2'],[1,2],[1,2],[1,2]]
[[ 'Head_1', 'Head_2'],[1 ,2],[1,2],[1,2]]
'table'随着console.log执行时间的增长而增长。
在此先感谢您提供的任何帮助。
我的猜测是这张表在全球范围内,因此你看到的问题。做这样的事情:tableMap [“userName”] = {}其中{}是当前使用它的表对象。你也可以使用闭包来解决这个问题。 –
你说得对,迈克尔,全球范围内的变数都造成了这个问题。 –