node.js表达来自amazon s3的代理静态

时间:2012-07-14 23:40:23

标签: node.js express amazon-s3 knox-amazon-s3-client

当请求进入某个页面时,例如app.get("/")我想从亚马逊s3返回一个静态HTML页面。我知道我可以从S3请求它然后发送它,但这似乎很慢。无论如何要告诉请求者直接从s3获取文件而不更改URL?

感谢。

如果失败了,从s3提供文件的最快方法是什么?

本教程展示了首先编写文件

http://www.hacksparrow.com/node-js-amazon-s3-how-to-get-started.html

// We need the fs module so that we can write the stream to a file
var fs = require('fs');
// Set the file name for WriteStream
var file = fs.createWriteStream('slash-s3.jpg');
knox.getFile('slash.jpg', function(err, res) {
    res.on('data', function(data) { file.write(data); });
    res.on('end', function(chunk) { file.end(); });
});

有没有办法在不先写文件的情况下发送文件?写它似乎非常慢。

2 个答案:

答案 0 :(得分:11)

如您所料,您无法在不更改URL的情况下直接从S3获取请求者。您必须代理远程页面:

var http = require('http'),
    express = require('express'),
    app = express();

app.get('/', function(req, res) {
  http.get('http://www.stackoverflow.com', function(proxyRes) {
    proxyRes.pipe(res);
  });
});

app.listen(8080);

您可以缓存远程页面以获得更好的性能。

答案 1 :(得分:0)

如果s3页面是真正静态的(例如很少更改),您的服务器肯定会在第一次请求时加载它并将其缓存;这不会导致任何明显的减速。

否则,我会重新考虑“不改变URL”的要求;最常见的“解决方案”是通常涉及框架的黑客攻击。