我目前正在开发一个应用程序,需要在Firebase上运行后端代码。我从未使用过Typescript和Functions,所以我的代码中很可能有一个错误阻止了函数的部署。让我感到困扰的是,这些函数使用firebase服务在本地运行,没有任何问题,但当我想部署该函数时,我收到了一个错误,说该函数没有正确部署。当我在调试中运行它时,它说错误可能是由于用户代码中的错误引起的。错误日志:
{"代码":3,"消息":加载用户代码时函数失败。这可能是由于用户代码中的错误。错误消息:错误:请检查您的函数日志以查看错误原因:cloud.google.com/functions/docs/monitoring/loging#viewing_logs。其他疑难解答文档可在cloud.googe.com/functions/documents/troubling#logging上找到。请参阅it cloud.google.com/functions/docs/troubleshooting可获取深入的疑难解答文档"}
我想让函数从api下载数据,检查Firestore数据库中是否已经存在相同的数据,如果不存在,则写入数据库。功能如下:
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import fetch from "cross-fetch";
admin.initializeApp();
const db = admin.firestore();
export const scheduledFetch = functions.pubsub.schedule("*/15 * * * *").onRun( (context) => {
fetch(url)
.then((res) => {
return res.json();
}).then((data) => {
console.log(data.articles);
data.articles.array.forEach((article : any) => {
const query = db
.collection("sampleData")
.where("title", "==", String(article.title));
query.get().then((snapshot) => {
if (snapshot.empty) {
console.log("writing document");
const data = {
type: "article",
author: article.author,
title: article.title,
description: article.description,
url: article.url,
urlToImage: article.urlToImage,
publishedAt: article.publishedAt,
content: article.content,
source: article.source,
};
db.collection("sampleData")
.doc()
.set(data);
} else {
console.log("Already exists, not writing");
}
}).catch((error) => {
console.log(error);
});
});
}).catch((error) => {
console.log(error);
});
});
因此,经过几个小时的查找,firebase函数服务似乎与交叉获取不兼容。安装并使用nodefetch后,函数将正确部署。