Nodejs – stream输出到浏览器

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') 

我如何获得stream式传输到浏览器的数据?

如果你只是普遍问什么是错误的,那么主要有两点:

  1. 您正在使用child_process.exec()
  2. 你从来没有呼吁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'); 

请注意,这实际上并不需要“stream”,因为这个词通常被使用。 如果你有一个长时间运行的进程,那么你不想在内存中缓冲标准输出,直到完成(或者如果你正在向浏览器发送一个文件等),那么你会想'stream'输出。 您可以使用child_process.spawn来启动进程,立即编写HTTP标头,然后每当在标准输出上触发“数据”事件时,您将立即将数据写入HTTPstream。 在“退出”事件中,您将调用stream结束来终止它。