如何从s3到node expressjs提供静态网站服务?

时间:2016-10-26 12:14:30

标签: node.js amazon-web-services express amazon-s3

目前我使用app.use(express.static('public')),我的文件位于我的节点js express app的公共文件夹中,并且其工作正常。 但是,我想将这些文件(index.html等)存储在我的s3存储桶中(因此多个应用程序可以使用此网站)。 我试过了

app.get('/', function(req, res) {
    res.sendfile('link-to-s3-file/index.html'); 
 });

没有成功......

2 个答案:

答案 0 :(得分:4)

我不会重新发明轮子。在npm

上有一个最近且记录良好的中间件模块

来自文档:

app.get('/media/*', s3Proxy({
  bucket: 'bucket_name',
  prefix: 'optional_s3_path_prefix',
  accessKeyId: 'aws_access_key_id',
  secretAccessKey: 'aws_secret_access_key',
  overrideCacheControl: 'max-age=100000'
}));

答案 1 :(得分:0)

我希望/foo与其他s3存储桶上的/foo.html相匹配。我使用了以下方法:

app.get('/:thePath', function(req, res) {
    var key = "saved/" + req.params.thePath;
    if(key.indexOf(".html") === -1) {
        key = key + ".html";
    }

    s3.getObject({ Bucket: "just-read", Key: key })
   .on('httpHeaders', function (statusCode, headers) {
        res.set('Content-Length', headers['content-length']);
        res.set('Content-Type', "text/html");
        this.response.httpResponse.createUnbufferedStream()
            .pipe(res);
    })
    .send();
});