【问题标题】:Redirect outgoing external asset requests to local filesystem with NodeJS使用 NodeJS 将传出的外部资产请求重定向到本地文件系统
【发布时间】:2017-01-02 13:55:51
【问题描述】:

假设我们有一个对 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}

有没有办法通过代理来做到这一点,或者削减一个新分支并将所有外部资产链接替换为本地文件位置会更好吗?

【问题讨论】:

    标签: html node.js http express proxy


    【解决方案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 请求的每个资产,它总是会通过您的 express 服务器,并且获取资产的负载将来自 express 服务器。您可以将其用于开发,但不建议用于生产。

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

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

    【讨论】:

    • 是的,这是我的第一个想法,但对于我可能需要提供的 50 多张图片来说,这并不实用。我几乎必须更改每个图像 URL 才能转到我的 Express 服务器并有条件地重新路由。
    • 你可以在表达服务器路由规则时使用*.png。
    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 2017-02-12
    • 2013-10-29
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多