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

2024-03-03

我按照该视频中的说明进行操作,到目前为止,一切都运行良好,直到我需要清除 CDN 中的旧 HTML:

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

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

Firebase 托管提供该静态 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 函数日志中没有崩溃或异常。任何帮助深表感谢。谢谢


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

您需要加入付费 Firebase 计划才能进行外部 API 调用:https://firebase.google.com/pricing/ 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" });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐