从磁盘获取文件,以便将其作为HTTP响应的一部分进行流式传输

时间:2011-12-17 15:15:51

标签: javascript http node.js

我在Node.js之上编写HTTP服务器,而不使用HTTP模块。

检索GET消息:GET /www/index.html HTTP/1.1应发送一个位于/www/index.html的文件的响应,与图像和其他文件相同。

有人能指导我采用javascript方式从磁盘中获取文件并将其添加到我的HTTP响应中吗?

我的服务器应该能够支持以下内容类型:

  1. JavaScript:application / javascript
  2. HTML:text / html
  3. CSS:text / css
  4. JPEG:image / jpeg
  5. GIF:image / gif

2 个答案:

答案 0 :(得分:1)

我认为fs module正是您所寻找的。

它提供了各种打开和读取文件的功能。一个简单的例子:

fs.readFile('/etc/passwd', function (err, data) {
  if (err) throw err;
  console.log(data);
});

您还可以参考此博文,了解如何使用节点阅读文件:Different ways to read in files using node.js

答案 1 :(得分:1)

这样的事情:

var fs = require('fs'),
    http = require('http'),
    path = require('path');
http.createServer(function(req,res){
   path.exists('./' + req.url, function(exists){
     if (!exists){ res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('not found'); }
     else {
       var read_stream = fs.createReadStream('./' + req.url);
       if (read_stream.readable){ res.writeHead(200, {'Content-Type':'text/plain'}); }
       else { res.writeHead(500, {'Content-Type':'text/plain'}); res.end('Error Reading File'); }
       read_stream.on('data', function(data){ res.write(data); });
       read_stream.on('end', function(){ res.end(); fs.close(read_stream); });
     }
   }
}).listen(3030);

这里的主要技巧是使用文件的可读流。