我正在尝试在nodejs中编写一个简单的webserver,它可以在linux VM上执行任意shell命令。对此服务的要求是,输出应该在使用节点实时启动进程的控制台上以及在浏览器中打印。 到目前为止,我目前的代码在完成命令之前不会输出命令的标准输出。
如何解决此问题,以便在控制台和浏览器中获得实时流媒体输出?另外,我希望对于以非零状态代码退出的cmds,请求的状态代码为非200。
#!/usr/local/bin/node
var http = require('http'),
url = require('url'),
exec = require('child_process').exec;
var host = "127.0.0.1",
port = "8080",
thisServerUrl = "http://" + host + ":" + port;
http.createServer(function (req, res) {
req.addListener('end', function () {
});
var parsedUrl = url.parse(req.url, true);
var cmd = parsedUrl.query['cmd'];
console.log("CMD to run is " + cmd)
res.writeHead(200, {'Content-Type': 'text/plain'});
if( cmd ) {
var child = exec(cmd, function (error, stdout, stderr) {
var result = '{"stdout":' + stdout + ',"stderr":"' + stderr + '","cmd":"' + cmd + '"}';
res.end(result + '\n');
});
} else {
var result = '{"stdout":"' + '' + '","stderr":"' + 'cmd is mandatory' + '","cmd":"' + cmd + '"}';
res.end(result + '\n');
}
}).listen(port, host);
console.log('Server running at ' + thisServerUrl );