带有 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", {..})