Я следую инструкциям из этого видео, и пока все работает идеально, вплоть до того момента, когда мне нужно очистить CDN от старого HTML:
https://www.youtube.com/watch?v=7_2CJs_VZk4
До сих пор я создал статическую HTML-страницу с использованием облачных функций Firebase, и она хранится в облачном хранилище Firebase.Всякий раз, когда данные из моей базы данных Firebase обновляются, новая и обновленная статическая HTML-страница отображается и сохраняется в облачном хранилище.
Хостинг Firebase обслуживает эту статическую HTML-страницу и сохраняется в CDN.Согласно приведенному выше видео, я установил длительное время обновления для CDN, потому что я хочу, чтобы оно обновлялось только при внесении изменений в данные в базе данных Firebase (без обновления CDN, если не было внесено никаких изменений)
Чтобы это работало, при обновлении страницы старую HTML-страницу, хранящуюся в CDN, необходимо очистить и заменить новой HTML-страницей.
Видео во время 33:19 предлагает следующий код:
const purgeUrl = `${ORIGIN}/${path}`;
await request(purgeUrl, { method: "PURGE" });
К сожалению, это не работает.Я вижу, что страница обновлена в облачном хранилище, но при обновлении 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 нет сбоев или исключений.Буду признателен за любую оказанную помощь.Спасибо