那麼我現在要做的是遍歷JavaScript對象(sensors
),每個cmd
和parser
屬性,運行系統中的每個外殼的cmd
一個數組,解析它的輸出和相應的parser
函數,並將結果字符串追加到服務器的res
對象中。返回多個shell命令在node.js的結果
第一個問題是我得到一個錯誤,聲稱當前對象沒有方法parser
。我嘗試了一些不同的東西,但仍然無法識別該對象的屬性。
第二個問題是,當我放棄並硬編碼循環內的解析函數(這會破壞我添加需要不同解析器的命令的能力)時,是因爲每個命令的輸出都在回調函數中讀取,服務器在回調返回之前運行res.end()
,導致對瀏覽器的空響應。
我對節點和JavaScript相當陌生,所以我確定我犯了一些初學者的錯誤,我似乎無法在我的腦海中將它們整理出來。任何幫助,將不勝感激。
// requires
var http = require('http');
var exec = require('child_process').exec;
// parsers
var parseTemp = function(str) {
return ((parseInt(str, 16)/50 - 273.15).toFixed(2));
};
// sensors
var sensors = [
{
label: "Object temp",
cmd: "i2cget -y 3 0x5a 0x07 w",
parser: parseTemp,
units: " degrees C"
},
{
label: "Ambient temp",
cmd: "i2cget -y 3 0x5a 0x06 w",
parser: parseTemp,
units: " degrees C"
}
];
// server
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
for (var s in sensors) {
exec(s.cmd, function (error, stdout, stderr) {
res.write(s.label + ': ' + s.parser(stdout) + s.units + '\n');
});
}
res.end();
}).listen(1337, '');
console.log('Server running on port 1337');
完美的解決方案,非常感謝。 – Luke 2012-04-05 02:01:25