那么我现在要做的是遍历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