javascript - Hur löser man fel vid distribution av Firebase Cloud Functions?
Jag använder Firebase Cloud Functions.
Det finns en funktion som heter fetchNewsScheduled, den körs varannan timme. Den gör detta:
rensa samlingen med fn
clearNewsCollectionför att frigöra databasenHämta data från API och skicka dem till databasen
Det är allt...
Men misstag händer och jag har ingen aning om varför:
Fel: Det uppstod ett fel vid distributionen av funktioner:
Fel Misslyckades med att uppdatera funktionen fetchNewsScheduled i regionen us-central1
type ArticleType = {
_type: string;
name: string;
url: string;
image: {
_type: string;
thumbnail: {
_type: string;
contentUrl: string;
width: number;
height: number;
};
isLicensed: boolean;
};
description: string;
datePublished: string;
};
type SimplifiedArticleType = {
name: string;
url: string;
imageUrl: string;
description: string;
datePublished: string;
};
async function clearNewsCollection() {
const snapshot = await db.collection("news").get();
const batch = db.batch();
snapshot.forEach((doc) => {
batch.delete(doc.ref);
});
await batch.commit();
console.log(`Deleted ${snapshot.size} documents from`);
}
async function fetchNews() {
const options = {
method: "GET",
url: "https://bing-news-search1.p.rapidapi.com/news",
params: { safeSearch: "Off", textFormat: "Raw" },
headers: {
"X-BingApis-SDK": "true",
"X-RapidAPI-Key": "my_key",
"X-RapidAPI-Host": "bing-news-search1.p.rapidapi.com",
},
};
try {
await clearNewsCollection();
const response = await axios.request(options);
const newsArticles = response.data.value; //an array
const simplifiedArticles = newsArticles.map((article: ArticleType) => {
return {
name: article.name,
url: article.url,
imageUrl: article.image?.thumbnail?.contentUrl,
description: article.description,
datePublished: article.datePublished, //eg. "2023-03-10T14:31:02.0000000Z", moment(datePublished).fromNow();
};
});
const batch = db.batch();
simplifiedArticles.forEach((article: SimplifiedArticleType) => {
const docRef = db.collection("news").doc();
batch.set(docRef, article);
});
await batch.commit();
console.log("Batch write successful");
} catch (error) {
console.log("Error writing documents:", error);
}
}
// Define the Cloud Function to run every 2 hours
export const fetchNewsScheduled = functions.pubsub
.schedule("every 2 hours")
.onRun(async (context) => {
await fetchNews();
return null;
});
Lösning:
Jag gjorde några vårdslösa misstag.
Först installerade jag axios i cd my-app.
Det bör vara cd my-app => cd functions => npm install axios.
Då kan löftet från API:et vara null, undefined, etc.
Därför finns det några meddelanden till framtida läsare:
- Kontrollera package.json i functions-mappen.
- Du kan inte spara ett odefinierat värde i Firebase
const simplifiedArticles = newsArticles.map((article: ArticleType) => {
return {
name: article.name || "",
url: article.url || "",
imageUrl: article.image?.thumbnail?.contentUrl || "",
description: article.description || "",
datePublished: article.datePublished || "", //eg. "2023-03-10T14:31:02.0000000Z", moment(datePublished).fromNow();
};
});