错误:HTTP 错误 400,请求有错误。 Firebase Firestore 云功能

问题描述 投票:0回答:14

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

我正在部署功能

i 功能:确保启用必要的 API...

i 运行时配置:确保启用必要的 API...

✔ 运行时配置:启用所有必需的 API

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

i 函数:准备函数目录用于上传...

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

✔functions:functions文件夹上传成功

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

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

⚠函数:创建函数followerNotification失败

⚠功能:HTTP错误:400,请求有错误

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

函数部署有错误。要继续部署其他功能(例如>数据库),请运行: firebase 部署——功能除外

错误:功能未正确部署。

有麻烦吗?尝试 firebase 部署 --help

其他一切都没有问题。仅当我尝试使用 Firebase Firestore 制作某些东西时。

firebase google-cloud-functions google-cloud-firestore
14个回答
112
投票

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

我试图听这条路:

/collection/document/{wildcard}

你可以做类似的事情

/collection/{wildcard}

/collection/document/collection/{wildcard}

13
投票

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

如此改变:

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

致:

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

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


13
投票

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

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>

7
投票

好吧,这就是你需要看的。

自从你有了

exports.yourFunctionName = functions.firestore.document

你需要看的是

.document

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

所以这不起作用

/level1/{level1Id}/level2
<- it points to a collection

这个会起作用

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

云函数将查找 document 何时具有 action

希望这对任何人都有帮助


6
投票

问题是您仅引用集合而不是文档,例如:

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

希望我能帮忙


4
投票

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

所以,如果名字是:

myFunctionsFromWorksWithCustumersTiggersTests

更改为较短的名称,例如:

WorkWithCustumers

我希望我有所帮助。


2
投票

在尝试发布侦听云发布/订阅的函数时,我遇到了同样的错误,该函数以数字字符开头。

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

只需更改名称即可修复此问题:

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

(感谢上面的 Nikolai Hegelstad。我没有资格发表评论。)


1
投票

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

创建_模板_

创建新模板

可能是函数名末尾的“_”(下划线)导致了此错误。


1
投票

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

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
,其他将部署。


1
投票

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


1
投票

如果有人仍然遇到此问题,就我而言,解决方案是运行

npm install -g firebase-tools
来更新 cli,并添加

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

到 package.json


0
投票

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


0
投票

只是想指出,linter 将拒绝侦听器声明中的换行符,即:

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

linter 没有多大帮助,并且文档中没有涵盖(像往常一样)


0
投票

检查您的数据库区域。 该函数应部署在数据库的同一区域。 这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.