【问题标题】:How to cache response from google drive API in NodeJS如何在 NodeJS 中缓存来自谷歌驱动器 API 的响应
【发布时间】:2019-04-27 04:23:45
【问题描述】:

我想在网页上从谷歌驱动器复制音乐文件。我有每个文件的链接,但调用的响应缓存标头是“无缓存,无存储,最大年龄 = 0,必须重新验证”,因此它永远不会保存在浏览器缓存中。有什么办法将缓存添加到谷歌驱动文件请求?

问题:

当您为音乐文件 (mp3) https://drive.google.com/a/pucp.pe/uc?id=1kYYS9FZ9Vxif5WJM9ZQcY4SR35NMgoIE&export=download 使用驱动器链接时,GET API 调用会收到一个 302 代码,该代码会生成一个重定向到另一个 URL,在本例中为“https://doc-0o-28-docs.googleusercontent.com/docs/securesc/bgp95l3eabkkpccn0qi0qopvc4e7d4mq/us95e8ush1v4b7vvijq1vj1d7ru4rlpo/1556330400000/01732506421897009934/01732506421897009934/1kYYS9FZ9Vxif5WJM9ZQcY4SR35NMgoIE?h=14771753379018855219&e=download”。每个调用的标题中都有no-cache

  1. 我尝试使用工作箱(缓存 API),但找不到缓存重定向的方法,可能我需要缓存两个调用(第一个 GET 和重定向)。但是,如果我使用重定向的 URL,缓存会起作用,但在第一次调用之前我无法访问该 URL。

  2. 我尝试使用来自 NodeJS 服务器的代理服务器

app.get("/test", (req, res) => {
    try {
      https.get(
        URL,
        function(response) {
          res.writeHead(response.statusCode, {...response.headers, 
            "Cache-Control": "public, max-age=120",
            "Expires": new Date(Date.now() + 120000).toUTCString() })

          response.pipe(res);
        }
      );
    } catch (e) {
      console.log(e);
    }
  });

我尝试使用第一个 URL,但没有成功。 我尝试使用重定向 URL,但得到“状态代码:找到 302”

一种解决方案可能是直接从我的服务器下载文件并提供它,但我会错过使用驱动器存储的意义。我真的很想使用谷歌驱动器存储,而不是复制我服务器上的所有文件。

有没有推荐的方法来做这种情况下的缓存?也许我缺少一些谷歌驱动器配置。或者您知道在这种情况下我可以采取的另一种方法吗?

【问题讨论】:

    标签: node.js caching google-drive-api google-api-nodejs-client workbox


    【解决方案1】:

    您应该能够使用 Workbox(以及一般的缓存存储 API)缓存重定向的响应。自动遵循 HTTP 30x 重定向by default,您应该只需要路由原始的、未重定向的 URL。

    这是一个使用 Workbox 缓存 MP3 文件的 Glitch 项目的实时示例:https://glitch.com/edit/#!/horn-sausage?path=sw.js:9:0

    相关的 sn-p 代码,也说明了在提供文件时没有使用 CORS(所以你会得到一个状态为 0opaque response)是:

    workbox.routing.registerRoute(
      new RegExp('https://drive.google.com/'),
      new workbox.strategies.CacheFirst({
        plugins: [
          new workbox.cacheableResponse.Plugin({statuses: [0, 200]})
        ],
      })
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      相关资源
      最近更新 更多