带有 fetch 的云功能无法正确部署
cloud function with fetch could not deploy correctly
我目前正在开发需要与我的 firestore 配合使用的 firebase 云功能。我的 firebase 的结构如下:
chatrooms/{chatID}/{chatID}/anymessage
两个 chatID 相同,它们类似于一个单独的聊天室,每个聊天室中都有任何消息。此外,每个聊天室都有一个“hello”文档,其中包含我需要在我的云功能中使用的关键数据,因为我需要从那里提取一个密钥,以便我可以发送推送通知。
这是我目前正在尝试部署的云功能:
exports.createpushnotification = functions.firestore.document('chatrooms/{chatID}/{chatID}/hello').onUpdate((change, context) => {
const keyofuser1 = change.after.data().partner1pushkey; //key to use for push notification
fetch("https://exp.host/--/api/v2/push/send", {
method:"POST",
headers:{
"Accept": "application/json",
"Content-Type": "application/json"
},
body:JSON.stringify({"to":keyofuser1, "body":"New Message!"})
})
})
基本上我想要一个进入每个聊天室目录的云函数,从那里获取“hello”文件并等待它更新,当它更新时,执行获取操作。不幸的是我得到了一个错误,即使使用 --debug 我也看不到任何可以帮助我的错误日志:
Functions deploy had errors with the following functions:
createpushnotification(us-central1)
To try redeploying those functions, run:
firebase deploy --only "functions:createpushnotification"
To continue deploying other features (such as database), run:
firebase deploy --except functions [2021-08-23T07:33:26.669Z] Error during update for
projects/*********/locations/us-central1/functions/createpushnotification:
Error: Functions did not deploy properly.
我做错了什么?
您的问题来自于您在定义您的 两次 相同的通配符标识符 ,即 chatID
云函数。
更改代码以使用两个不同的标识符,如下所示
exports.createpushnotification = functions.firestore.document('chatrooms/{chatDocID}/{chatSubcollectionID}/hello').onUpdate(..);
应该可以解决问题。
此外,由于获取操作是异步的,并且由于您的 Cloud Function 是后台 Cloud Function,因此您需要 return return 由 fetch()
编辑的承诺,以便向云函数平台表明它可以终止该函数。有关详细信息,请参阅 doc。
进行如下操作:
return fetch("https://exp.host/--/api/v2/push/send", {..})
我目前正在开发需要与我的 firestore 配合使用的 firebase 云功能。我的 firebase 的结构如下:
chatrooms/{chatID}/{chatID}/anymessage
两个 chatID 相同,它们类似于一个单独的聊天室,每个聊天室中都有任何消息。此外,每个聊天室都有一个“hello”文档,其中包含我需要在我的云功能中使用的关键数据,因为我需要从那里提取一个密钥,以便我可以发送推送通知。
这是我目前正在尝试部署的云功能:
exports.createpushnotification = functions.firestore.document('chatrooms/{chatID}/{chatID}/hello').onUpdate((change, context) => {
const keyofuser1 = change.after.data().partner1pushkey; //key to use for push notification
fetch("https://exp.host/--/api/v2/push/send", {
method:"POST",
headers:{
"Accept": "application/json",
"Content-Type": "application/json"
},
body:JSON.stringify({"to":keyofuser1, "body":"New Message!"})
})
})
基本上我想要一个进入每个聊天室目录的云函数,从那里获取“hello”文件并等待它更新,当它更新时,执行获取操作。不幸的是我得到了一个错误,即使使用 --debug 我也看不到任何可以帮助我的错误日志:
Functions deploy had errors with the following functions: createpushnotification(us-central1)
To try redeploying those functions, run: firebase deploy --only "functions:createpushnotification"
To continue deploying other features (such as database), run: firebase deploy --except functions [2021-08-23T07:33:26.669Z] Error during update for projects/*********/locations/us-central1/functions/createpushnotification:
Error: Functions did not deploy properly.
我做错了什么?
您的问题来自于您在定义您的 两次 相同的通配符标识符 ,即 chatID
云函数。
更改代码以使用两个不同的标识符,如下所示
exports.createpushnotification = functions.firestore.document('chatrooms/{chatDocID}/{chatSubcollectionID}/hello').onUpdate(..);
应该可以解决问题。
此外,由于获取操作是异步的,并且由于您的 Cloud Function 是后台 Cloud Function,因此您需要 return return 由 fetch()
编辑的承诺,以便向云函数平台表明它可以终止该函数。有关详细信息,请参阅 doc。
进行如下操作:
return fetch("https://exp.host/--/api/v2/push/send", {..})