具有云功能的Firebase托管-如何清除/刷新CDN缓存?

时间:2018-10-12 21:15:40

标签: firebase caching google-cloud-functions cdn firebase-hosting

我正在按照此视频中的说明进行操作,到目前为止,一切正常,直到需要清除旧HTML的CDN为止。

https://www.youtube.com/watch?v=7_2CJs_VZk4

到目前为止,我已经使用Firebase Cloud Functions创建了一个静态HTML页面,并将其存储在Firebase Cloud Storage中。每当我的Firebase数据库中的数据更新时,都会呈现一个新的和更新的静态HTML页面并将其保存到Cloud Storage。

Firebase Hosting提供该静态HTML页面,并将其存储在CDN上。 根据以上视频,我为CDN设置了较长的刷新时间,因为我只希望在对Firebase数据库中的数据进行更改时进行更新(如果未进行更改,则不刷新CDN)

要使此方法有效,在更新页面时,必须清除CDN上存储的旧HTML页面,并用新的HTML页面替换。

时间33:19的视频建议以下代码:

const purgeUrl = `${ORIGIN}/${path}`;
await request(purgeUrl, { method: "PURGE" });

不幸的是,它似乎不起作用。我可以看到该页面已在Cloud Storage上更新,但是刷新URL时不会显示新的HTML页面。 显示新HTML的唯一方法是再次重新部署Firebase代码(终端-firebase部署)。

这是我的代码(在node.js中):

const ORIGIN = "examplesite-30ccf.firebaseapp.com/";

function getFacts(){
  return database.ref('/web app/test').once('value').then(snap =>snap.val());
}

exports.updateHomePage = functions.database.ref('/web app/test')
.onWrite((snap, context) => {

  return getFacts()
  .then(result1 => {
    console.log("result1", result1);
      return bucket
      .file('public_html/index.html')
      .save(HomePage(result1), {
        gzip: true,
        metadata: {
          contentType: "text/html; charset=utf-8",
          cacheControl: "max-age=300, s-maxage=31536000" // indef CDN cache since we purge manually
        }
      }); 
  }).then(doNotUse => {

    const purgeUrl = `${ORIGIN}`;
    console.log("purged URL", purgeUrl);
    return request(purgeUrl, { method: "PURGE" });
}).catch(error => {
      // Handle errors of asyncFunc1() and asyncFunc2()
  });

});`

Firebase Functions日志中没有崩溃或异常。任何帮助深表感谢。谢谢

2 个答案:

答案 0 :(得分:2)

我在尝试解决另一个问题时无意中找到了答案。

您需要使用付费的Firebase计划才能进行外部API调用: https://firebase.google.com/pricing/

因此,只要升级了计划,PURGE方法就可以工作。 这是允许您清除CDN(Typescript中的Node.js)的代码:

import * as request from "request-promise";

const purgeUrl = `examplesite.com`;
await request(purgeUrl, { method: "PURGE" });

答案 1 :(得分:0)

只需执行curl命令:

curl -X PURGE https://yoursite.com/path