我正在按照此视频中的说明进行操作,到目前为止,一切正常,直到需要清除旧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日志中没有崩溃或异常。任何帮助深表感谢。谢谢
答案 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