[英]File retrieval from AWS S3 to Node.js server, and then to React client
[英]How to cache an AWS S3 file on a node.js server and serve it on request?
对于我的网站,我将所有assets
(fonts / images / js等)部署到S3 bucket
。 index.html
(单页Ember.js应用程序)已部署在弹性beantalk node.js
服务器上。 节点app.js
接受对www.domain.com/*
任何请求,并提供本地存储的index.html
。 我希望能够减少为每个生产版本将新应用程序部署到Elastic beantalk的过程,并只需将所有资产和index.html
部署到S3 bucket
。
这是我到目前为止的内容:
var AWS = require('aws-sdk'),
fs = require('fs');
/*
* AWS Security credentials
*/
AWS.config.loadFromPath('./config.json');
var port = process.env.PORT || 3000,
http = require("http");
var static = require('node-static');
/*
* Create a node-static server instance
* to serve the './public' folder
*/
var file = new static.Server();
/*
* Fetch .index.html from S3
* and cache it locally
*/
var s3 = new AWS.S3();
var params = {Bucket: 'assets', Key: 'index.html'};
var file = fs.createWriteStream('index.html');
s3.getObject(params).
on('httpData', function(chunk) { file.write(chunk); }).
on('httpDone', function() { file.end(); }).
send();
var server = http.createServer(function (request, response) {
request.addListener('end', function () {
file.serveFile('index.html', 200, {}, request, response);
}).resume();
}).listen(port);
我认为这只会在服务器首次启动时从S3获取index.html
。 缓存的最佳实践是什么,最好是1分钟过期。
谢谢!
看看亚马逊的CloudFront。 听起来很熟悉您要完成的工作,即文件不必再次通过服务器。 给整个页面加载的往返行程增加了一点。
也就是说,要在本地缓存,您可以将整个文件存储在Redis
(或其他快速的东西,例如Raik
, memcache
等)。
我不确定如果文件很大,它将如何响应,但是它仍然比每次从S3提取速度更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.