var http = require("http");
var sys = require('sys')
var filename = process.ARGV[2];
var exec = require('child_process').exec;
var com = exec('uptime');


http.createServer(function(req,res){
  res.writeHead(200,{"Content-Type": "text/plain"});
  com.on("output", function (data) {
    res.write(data, encoding='utf8');
  });
}).listen(8000);
sys.puts('Node server running')

如何将数据流式传输到浏览器?

最佳答案

如果您只是一般地询问出了什么问题,那么主要有两件事:

  • 您使用的 child_process.exec() 不正确
  • 你从来没有叫 res.end()

  • 你正在寻找的是更像这样的东西:
    var http = require("http");
    var exec = require('child_process').exec;
    
    http.createServer(function(req, res) {
      exec('uptime', function(err, stdout, stderr) {
        if (err) {
          res.writeHead(500, {"Content-Type": "text/plain"});
          res.end(stderr);
        }
        else {
          res.writeHead(200,{"Content-Type": "text/plain"});
          res.end(stdout);
        }
      });
    }).listen(8000);
    console.log('Node server running');
    

    请注意,这实际上并不需要“流式传输”,因为该词通常被使用。如果您有一个长时间运行的进程,以至于您不想在完成之前将 stdout 缓冲在内存中(或者如果您将文件发送到浏览器等),那么您可能想要“流式传输”输出。您将使用 child_process.spawn 启动进程,立即写入 HTTP header ,然后每当在 stdout 上触发“数据”事件时,您将立即将数据写入 HTTP 流。在“退出”事件中,您将在流上调用 end 以终止它。

    关于node.js - Nodejs - 将输出流式传输到浏览器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3932980/

    10-11 21:42