使用fetch的Firebase云函数无法正常部署,如何排查问题?
问题原因
- 触发器路径非法:Firebase Firestore的触发器监听路径不允许使用重名通配符,你定义的路径
chatrooms/{chatID}/{chatID}/hello中两次使用{chatID},会直接触发部署校验失败。 - 异步操作未返回Promise:Firebase云函数要求所有异步任务必须返回Promise,你代码中的
fetch调用没有加return,云函数会提前终止执行,也可能在部署阶段触发校验错误。 - 缺少fetch依赖:Firebase云函数默认的Node.js运行环境(低于18.x版本)没有内置全局
fetch方法,未安装对应依赖直接调用会触发运行时错误,也会导致部署失败。
修复方案
- 重命名重复的通配符,后续增加参数一致性判断保证逻辑符合预期
- 在
functions目录下执行命令安装node-fetch依赖:
npm install node-fetch@2
- 调整代码返回异步Promise,引入依赖,修复后代码如下:
const fetch = require('node-fetch'); exports.createpushnotification = functions.firestore.document('chatrooms/{chatID}/{chatID2}/hello').onUpdate((change, context) => { // 校验两级ID一致,符合你的存储结构规则 if (context.params.chatID !== context.params.chatID2) { return null; } const keyofuser1 = change.after.data().partner1pushkey; // 返回fetch的Promise,让云函数等待请求完成 return 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!"}) }) })
- 重新执行部署命令即可。
内容的提问来源于stack exchange,提问作者Kubaguette The Testobun
相关产品推荐
相关产品推荐

