当请求进入某个页面时,例如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(); });
});
有没有办法在不先写文件的情况下发送文件?写它似乎非常慢。
答案 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”的要求;最常见的“解决方案”是通常涉及框架的黑客攻击。