【问题标题】:Error: HTTP Error 400, The Request has errors. Firebase Firestore Cloud Functions错误:HTTP 错误 400,请求有错误。 Firebase Firestore 云函数
【发布时间】:2018-03-30 19:03:46
【问题描述】:

运行命令 firebase deploy 时出现此错误:

我正在部署功能

i 函数:确保启用必要的 API...

i runtimeconfig:确保启用必要的 API...

✔ runtimeconfig:启用所有必要的 API

✔ 功能:启用所有必要的 API

i 函数:为上传准备函数目录...

i 函数:用于上传的打包函数 (4.04 KB)

✔functions:functions文件夹上传成功

我开始发布过程(可能需要几分钟)...

i 函数:创建函数 followerNotification...

⚠函数:创建函数followerNotification失败

⚠函数:HTTP错误:400,请求有错误

⚠ 功能:1 个功能部署失败。

函数部署有错误。要继续部署其他功能(例如 >database),请运行: firebase deploy --except 函数

错误:函数未正确部署。

有问题吗?试试 firebase deploy --help

其他一切都可以正常工作。仅当我尝试使用 Firebase Firestore 制作东西时。

【问题讨论】:

    标签: firebase google-cloud-functions google-cloud-firestore


    【解决方案1】:

    问题是你只引用了一个集合而不是一个文档,比如:

    exports.myFunctionName = functions.firestore
          .document('users').onWrite((event) => {
            // ... Your code here
          });
    

    您需要参考以下文档:

    exports.myFunctionName = functions.firestore
      .document('users/marie').onWrite((event) => {
        // ... Your code here
      });
    

    您还可以使用通配符,例如:

    exports.myFunctionName = functions.firestore
      .document('users/{userId}').onWrite((event) => {
        // ... Your code here
      });
    

    这里有描述:https://firebase.google.com/docs/functions/firestore-events

    希望我能帮上忙

    【讨论】:

    • 前两个函数是一样的!
    【解决方案2】:

    对我来说,没有一个答案对我有帮助。最后我得到了一个步骤列表(来自谷歌)来查明问题。如果你运行:

    firebase --debug --only functions deploy
    

    它将给出更详细的错误消息,在我的情况下:

    HTTP RESPONSE BODY <?xml version='1.0' encoding='UTF-8'?><Error><Code>EntityTooLarge</Code><Message>Your proposed upload is larger than the maximum object size specified in your Policy Document.</Message><Details>Content-length exceeds upper bound on range</Details></Error>
    

    【讨论】:

    • 它有帮助。我不知道函数名称的最大长度是 63
    • 这是最通用的答案,适用于遇到此错误消息的任何人,谢谢!
    【解决方案3】:

    如果有人仍然遇到这种情况,在我的情况下,解决方案是运行 npm install -g firebase-tools 来更新 cli,并添加

    "engines": {
      "node": "8"
    }
    

    到 package.json

    【讨论】:

      【解决方案4】:

      Okej,这就是您需要查看的内容。

      因为你有

      exports.yourFunctionName = functions.firestore.document

      您需要查看的是.document

      您的路径必须指向一个文档,而不是一个集合。

      所以这将不起作用

      /level1/{level1Id}/level2

      会起作用

      /level1/{level1Id}/level2/{level2Id}

      文档动作

      时,云函数会寻找

      希望这对任何人都有帮助

      【讨论】:

        【解决方案5】:

        如果您使用了错误的 Node 版本,也会发生这种情况。我刚刚在处理函数时将我的节点版本设置为 8.x 后体验到了这一点。切换回 v10.x,问题就消失了。

        【讨论】:

          【解决方案6】:

          我遇到这种情况是因为导出函数名称开头的下划线。你可以自己测试一下:

          exports._someLongNameWithUnderscore= functions.auth.user().onCreate(user => {
            return true;
          });
          
          exports.someLongNameWithoutUnderscore= functions.auth.user().onCreate(user => {
            return true;
          });
          
          exports.shortName= functions.auth.user().onCreate(user => {
            return true;
          });
          

          开头或结尾有下划线的将失败并显示HTTP:400,其他将部署。

          【讨论】:

            【解决方案7】:

            这也发生在我身上,然后我意识到在第二级,firestore 只允许文档而不是集合。

            我正在尝试收听这条路径:

            /collection/document/{wildcard}
            

            你可以做类似的事情

            /collection/{wildcard}
            

            /collection/document/collection/{wildcard}
            

            【讨论】:

            • 同样的问题!奇怪的是没有描述性的错误信息。
            • Okej,这不可能是答案,因为无论你去多少级都没有关系。你可以尽可能多地嵌套它。看我的回答
            • @ivan :您轻松地为我节省了 3-4 小时!谢谢你:)
            • 这条消息在 2021 年 7 月仍然很神秘,包括通过用于云功能的 Web 编辑器。按照 adamduren 的回答,将这个答案与从路径中删除错误的斜线相结合是我的解决方案。
            【解决方案8】:

            在我更改函数名称之前,我也遇到了同样的错误

            create_template_

            create_new_template

            可能是函数名末尾的'_'(下划线)导致了这个错误。

            【讨论】:

              【解决方案9】:

              还想指出,linter 将拒绝侦听器声明时的换行符,即:

              exporst.myFunc = functions.firestore
              .document('collection/{uid}')
              .onEvent(...)
              

              linter 没有多大帮助,也没有包含在文档中(像往常一样)

              【讨论】:

                【解决方案10】:

                在尝试发布以数字字符开头的 Cloud pub/sub 函数时,我遇到了同样的错误。

                exports.nightly_pruning = functions.pubsub.topic('24hr-tick').onPublish((event) => { 
                    ... 
                });
                

                只需更改名称即可修复它:

                exports.nightly_pruning = functions.pubsub.topic('nightly-tick').onPublish((event) => { 
                    ... 
                });
                

                (感谢上面的 Nikolai Hegelstad。我没有评论的声誉。)

                【讨论】:

                • 我觉得这有点吵,然后才是真正的答案。您基本上刚刚实施了 Nikolai 的解决方案。您应该编辑他们的答案以包含一个示例,或者考虑获得足够的声誉来发表评论/点赞。
                • 这是一个真实的答案。我考虑过获得更多的声誉——回答这样的问题就是这样做的方法。我只是想尽可能地增加价值,并且由于我目前的声誉(因为我没有花很多时间来回馈堆栈溢出,这是我唯一可以做到的)。
                【解决方案11】:

                我对相同错误消息的问题是 Cloud Functions 的 pubsub 似乎不支持名称以数字字符开头的主题。

                【讨论】:

                  【解决方案12】:

                  这个问题可能是由函数名的长度引起的。

                  所以,如果名字是:

                  myFunctionsFromWorksWithCustumersTiggersTests
                  

                  换一个更短的名字,比如:

                  WorkWithCustumers
                  

                  我希望我有所帮助。

                  【讨论】:

                  • 谢谢!从一些玩弄,看起来函数名称的最大长度为 64 个字符。
                  【解决方案13】:

                  我也有这个问题。就我而言,这是因为我的触发器路径在文档路径中有一个斜杠。

                  如此变化:

                  functions.firestore
                    .document('some_path/{pushId}/')
                  

                  收件人:

                  functions.firestore
                    .document('some_path/{pushId}')
                  

                  帮我修好了。这似乎是由各种问题引起的,firebase cli 没有很好地解释原因。

                  【讨论】:

                  • 我遇到了这个问题和 Ivan 目前接受的答案中的一个
                  猜你喜欢
                  • 2019-11-05
                  • 2020-10-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-02-09
                  • 1970-01-01
                  相关资源
                  最近更新 更多