Cloud Functions for Firebase 错误:“400,不允许更改函数触发器类型或事件提供程序”
Posted
技术标签:
【中文标题】Cloud Functions for Firebase 错误:“400,不允许更改函数触发器类型或事件提供程序”【英文标题】:Cloud Functions for Firebase error: "400, Change of function trigger type or event provider is not allowed" 【发布时间】:2018-03-13 19:27:29 【问题描述】:当我运行 firebase deploy
时,我收到以下错误消息:
functions: HTTP Error: 400, Change of function trigger type or event provider is not allowed
【问题讨论】:
您之前部署函数getWatsonToken
是否由HTTP 请求而不是数据库事件触发?
Bob,我最初写 getWatsonToken 是为了从 auth onCreate 触发。我部署了它,但我从未运行过它。
@creative 的回答...解释了问题和解决方案。
在 Firebase Console for Functions 中,我有 getWatsonToken,在“事件”下显示“user.create”,执行次数为零。
@Thomas:如 Bob 的编辑所示,Google Cloud Functions 标签已经存在。像您这样的问题的正确标记是 google-cloud-functions][firebase]
(或您正在使用的 Firebase 的任何部分)。
【参考方案1】:
TL;DR
firebase functions:delete yourFunction // this can be done via the Firebase Console as well
firebase deploy
说明
基本上,Cloud Functions 期望每个函数始终使用相同的触发器,即一旦创建它就必须坚持其原始触发器,因为每个函数名称都连接到特定触发器。因此,触发器只能通过先删除函数然后使用不同的触发器再次创建它来更改。
现在可以使用 functions:delete
命令轻松完成:
firebase functions:delete yourFunction
documentation features more advanced use cases 也是如此。
旧解决方案
解决方案基本上是注释或删除您的函数,然后保存函数文件并进行部署。该函数将在 Firebase 中被删除,但之后您可以插入/取消注释您的函数,它会再次正常部署。当您使用函数并更改它使用的触发器类型(即 HTTP、数据库或身份验证)时,会发生此错误。
先剪掉
/* exports.yourFunction = someTrigger... */
然后,在部署(“firebase deploy”)之后替换您的触发器
exports.yourFunction = anotherTrigger...
【讨论】:
嗯,Firebase 在控制台中为函数添加一个删除按钮不是更有意义吗? 通过阅读另一个 *** 问题,Firebase 控制台没有“删除功能”按钮(与 Google Cloud Functions 不同),因为“firebase 部署”会覆盖您在控制台中执行的任何操作,即您可以删除控制台中的一个函数,但如果您不从项目中删除该函数,则下次运行“firebase deploy”时,该函数将出现在控制台中。 好的,我按照您的指示操作,一切都按照您说的进行。但是新功能没有执行。我在控制台中看到它的“事件”为“ref.update / userLoginEvent”,看起来不错。当我登录时,我在数据库中看到“/userLoginEvent”发生了变化。但是该函数没有执行,也没有出现 Watson 令牌。 哦,等等,当我再次尝试时,它就成功了!凉爽的!谢谢! Firebase 现在添加了从 cli 中删除函数的功能,如下所示:firebase functions:delete yourfunction
。更多信息here【参考方案2】:
您还可以转到 Google Cloud Platform 控制台中的 Cloud Functions 面板并从那里删除您的函数。之后,您可以从 firebase CLI 正常上传该功能。不知道为什么他们在 firebase 控制台中没有删除功能选项。
【讨论】:
【参考方案3】:对于将来偶然发现此功能的用户,Cloud Functions 控制台现在提供了一个删除按钮。
【讨论】:
以上是关于Cloud Functions for Firebase 错误:“400,不允许更改函数触发器类型或事件提供程序”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase Cloud Functions 测试中模拟 FCM admin.messaging().sendToDevice() 的实现
如何使用 Google Python Client for Cloud Functions 获取 Google Cloud Functions 列表?
Cloud Functions for Firebase 超时
Cloud Functions for Firebase onWrite 超时