要顯示用戶發送作業到羣集我有以下代碼(簡化)當快遞+ 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」] = {}其中{}是當前使用它的表對象。你也可以使用閉包來解決這個問題。 –
你說得對,邁克爾,全球範圍內的變數都造成了這個問題。 –