1

我想运行一些预定义的 shell 命令并将它们作为纯文本返回到 http 服务器中。(1) 处写入的内容正在提供给我的浏览器,但 (2) 处最终必须是标准输出的内容没有提供。任何人都可以帮助我如何实现这一目标吗?

var http = require('http'),
url = require('url'),
exec = require('child_process').exec,
child,
poort = 8088;


http.createServer(function(req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});

    var pathname = url.parse(req.url).pathname;
    if (pathname == '/who'){
        res.write('Who:'); // 1
        child = exec('who',
                     function(error, stdout, stderr){
                        res.write('sdfsdfs');   //2
                     })


    } else {
        res.write('operation not allowed');
    }

 res.end();

}).listen(poort);
4

1 回答 1

1

这是因为你放置 res.end() 的位置。

由于 exec 是异步的,因此 res.end() 实际上发生在您标记为 (2) 的 res.write 之前。在 .end 之后不能再发出写入,因此浏览器不会获得任何进一步的数据。

在 res.write 之后,您应该在exec 回调中调用 res.end() 。exec 回调将在子进程终止时发出,并将获得完整的输出。

于 2013-02-10T00:42:49.597 回答