我正在按照此视频中的说明进行操作,到目前为止,一切正常,直到需要清除旧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功能日志中没有崩溃或异常。任何帮助深表感谢。谢谢
最佳答案
我在尝试解决另一个问题时无意中找到了答案。
您需要使用付费的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" });