【发布时间】:2015-10-21 18:58:02
【问题描述】:
Link to a similar problem that has no answers, but written in C
我正在使用 NodeJS 解析来自 ark-server-tools 的输出,这是 SteamCMD 之上的一个层。我想做的是解析更新的进度并将其分配给一个变量,我将作为 GET 调用返回,客户端可以使用它来检查更新的进度。
我将更新的日志结果放入一个文件以运行我的代码,我已将其放入 PasteBin for brevity。
update.js
app.get('/update', function(req, res) {
var toReturn;
var outputSoFar;
var total;
var startPos;
var endPos = 0;
//var proc = spawn('arkmanager', ['update', '--safe']);
var proc = spawn('./update-log.sh'); //for testing purposes
proc.stdout.on('data', function(data){
outputSoFar += data.toString();
//if server is already updated
if (outputSoFar.indexOf('Your server is already up to date!') !== -1) {
toReturn = 'Server is already up-to-date.';
}
//find update progress
if (outputSoFar.indexOf('progress:') !== -1) {
for(var line in outputSoFar.split('\n')){
console.log('found progress');
startPos = outputSoFar[line].indexOf('progress:', endPos) + 10; //get the value right after progress:_, which should be a number
endPos = outputSoFar[line].indexOf(' (', startPos); // find the end of this value, which is signified by space + (
console.log(outputSoFar[line].substring(startPos, endPos).trim());
updatePercent = outputSoFar[line].substring(startPos, endPos).trim(); //returned to the `checkUpdateProgress` endpoint
}
toReturn = 'Updating...';
}
});
proc.stderr.on('data', function(data){
console.log(data);
});
proc.on('close', function (code, signal) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(JSON.stringify(toReturn));
res.end();
});
}
/*
* Returns progress of an update
*/
app.get('/updateProgress', function(req, res){
console.log('updatePercent: ' + updatePercent);
res.send(JSON.stringify(updatePercent));
});
几个问题:
1) 这是构建我的 RESTful API 的最佳方式吗?一个要求更新操作,另一个要求检查更新进度?
2) 我希望有一种更好的方法来测试该功能,因为回显控制台日志会返回一个整体的数据,而不是数据流。我该怎么做?
3) 我很确定解析函数本身并不完全正确,但由于#2,我很难对其进行测试。
如果您想查看整个项目,here's the repo。 提前感谢您的帮助!
【问题讨论】:
标签: javascript node.js rest express steam