Node.js Nodejs-流输出到浏览器

Node.js Nodejs-流输出到浏览器,node.js,Node.js,如何将数据流传输到浏览器?如果您只是一般性地问问题,有两个主要问题: 您不正确地使用了child\u process.exec() 您从未调用过res.end() 你要找的是更像这样的东西: var http = require("http"); var sys = require('sys') var filename = process.ARGV[2]; var exec = require('child_process').exec; var com = exec('uptime');

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

如果您只是一般性地问问题,有两个主要问题:

  • 您不正确地使用了
    child\u process.exec()
  • 您从未调用过
    res.end()
  • 你要找的是更像这样的东西:

    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')
    
    请注意,这实际上并不需要“流”这个词的一般用法。如果您有一个长时间运行的进程,在完成之前不想在内存中缓冲stdout(或者如果您正在向浏览器发送文件等),那么您会希望“流式”输出。您将使用child_process.spawn启动该进程,立即写入HTTP头,然后每当在标准输出上触发“数据”事件时,您将立即将数据写入HTTP流。在“exit”事件中,您将调用流上的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');