使用NodeJS将传出的外部资产请求重定向到本地文件系统

时间:2017-01-02 05:03:07

标签: html node.js http express proxy

我们假设我们要求S3存储桶获取图像:

<img src="https://s3-us-west-2.amazonaws.com/{BUCKET}/logo.png" />

我需要在无法访问互联网的情况下处理这个项目,所以在我的Express服务器中,我需要找到一种方法将所有请求从https://s3-us-west-2.amazonaws.com/{BUCKET}重定向到~/Desktop/project/{BUCKET}

有没有办法通过代理执行此操作,或者更好的方法是剪切新分支并将所有外部资产链接替换为本地文件位置?

1 个答案:

答案 0 :(得分:1)

您可以在网络面板中找到类似的内容

https://s3-us-west-2.amazonaws.com/{BUCKET}/logo.png

您基本上可以删除所有“http://s3-us-west-2.amazonaws.com

让我们说你在localhost:3000上运行它,你的请求看起来像http://localhost:3000/{BUCKET}/logo.png

您可以在快速服务器中添加以下行。

     var request = require('request');
     var proxy = true //if running locally else false
     app.get('/{BUCKET}/logo.png', function (req,res) {
          if (proxy)
              res.sendFile('/home/Desktop/project/' + req.url)
          else {
              var options = {url : 'http://s3-us-west-2.amazonaws.com' +req.url, 
                            method: 'GET'};
              req.pipe(request(options)).pipe(res);
          }
    )}

这个问题可能是,对于它从s3请求的每个资产,它将始终通过您的快速服务器,并且获取资产的负载将来自快速服务器。您可以进行开发,但不建议用于生产。

因此,对于最终部署,您可以再次放置所有“http://s3-us-west-2.amazonaws.com”。

如果您不想以编程方式执行此操作,则可以使用charles或fiddler等代理工具。它们捕获系​​统中的所有流量。您可以为特定请求或要从本地而不是s3获取的请求集创建规则。

相关问题