错误:HTTP 错误 400,请求有错误。 Firebase Firestore 云函数

Posted

技术标签:

【中文标题】错误:HTTP 错误 400,请求有错误。 Firebase Firestore 云函数【英文标题】:Error: HTTP Error 400, The Request has errors. Firebase Firestore Cloud Functions 【发布时间】: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 制作东西时。

【问题讨论】:

【参考方案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 目前接受的答案中的一个

以上是关于错误:HTTP 错误 400,请求有错误。 Firebase Firestore 云函数的主要内容,如果未能解决你的问题,请参考以下文章

逻辑错误的 HTTP 400(错误请求),不是格式错误的请求语法

http请求400错误

Firebase 函数 - https onRequest “HTTP 错误:400,请求有错误”

HTTP 400 - 错误请求

HTTP 400 错误请求 - CURL PHP

为啥网页打开错误上面出现个 HTTP 400错误的请求? 急..