将索引页面流式传输到客户端的正确方法是什么?

时间:2012-03-26 10:45:52

标签: node.js

在网络上找到的大多数示例中,index.html文件的提供方式如下:

function serveIndexPage(response) {
  fs.readFile('__dirname + /public/index.html', function (err, data) {
      response.end(data);  
  });
};

这似乎是一个坏主意,因为整个文件被读入内存然后发送到客户端。有没有更好的方法来做到这一点?我知道像Connect和Express这样的库提供了这样的功能,但是对于我的项目,我想使用plain node.js。

修改

此外,您有时会看到使用readFileSync,这更糟糕的是恕我直言。

2 个答案:

答案 0 :(得分:1)

理论上,您可以逐行读取文件response.write()将每行发送到客户端。

答案 1 :(得分:1)

通过管道传输数据,因此一个简单的静态HTTP服务器如下所示:

var Http = require('http'),
    Url = require('url'),
    Path = require('path'),
    Fs = require('fs');

Http.createServer(function(req, res) {
    var path = Url.parse(req.url).pathname;
    var file = Path.join(process.cwd(), path);

    path.exists(filename, function(exists) {
        if(!exists) {
            res.writeHead(404);
            res.end();
        }

        res.writeHead(200, /* mime type */);

        var fileStream = Fs.createReadStream(filename);
        fileStream.pipe(res);
    });
}).listen(process.env.PORT || 1999);

管道是

之类的简写
var s = Fs.createReadStream(filename);

s.on('data', function (data) {
    res.write(data);
});
s.on('end', function() {
    res.end();
});