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

时间:2017-10-18 19:48:21

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

当我运行命令firebase deploy时,我收到此错误:

  

我正在部署功能

     

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

     

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

     

✔timetimeconfig:启用所有必需的API   

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

我的功能:准备上传的功能目录......   

我的功能:用于上传的打包功能(4.04 KB)   

✔功能:功能文件夹上传成功   

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

我的功能:创建函数followerNotification ...   

⚠功能:无法创建函数followerNotification   

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

⚠功能:1个功能无法部署。

     

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

     

错误:功能未正确部署。

     

遇到麻烦?尝试使用firebase deploy --help

其他一切都没有问题。只有当我尝试使用Firebase Firestore创建内容时。

13 个答案:

答案 0 :(得分:59)

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

我试图听这条路:

/collection/document/{wildcard}

您可以执行类似

的操作
/collection/{wildcard}

/collection/document/collection/{wildcard}

答案 1 :(得分:7)

我也有这个问题。在我的情况下,这是因为我的触发路径在文档路径中有一个尾部斜杠。

如此改变:

[dependencies]
dep_b = { version = "0.1.0", path = "../dep_b", default-features = false }

要:

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

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

答案 2 :(得分:4)

问题是你只引用了一个集合,而不是像以下那样的文档:

exports.myFunctionName = functions.firestore
      .document('users/marie').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

希望我能帮忙

答案 3 :(得分:1)

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

所以,如果名称是:

myFunctionsFromWorksWithCustumersTiggersTests

更改较短的名称,例如:

WorkWithCustumers

我希望我帮助过。

答案 4 :(得分:1)

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

  

create_template _

  

create_new_template

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

答案 5 :(得分:1)

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

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

到package.json

答案 6 :(得分:1)

对我来说,所有答案都没有帮助我。最后,我从Google获得了一系列步骤来找出问题所在。如果您运行:

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 :(得分:0)

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

答案 8 :(得分:0)

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

C:\inetpub\Corporate Webiste\

只需更改名称即可解决:

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

(感谢上面的尼古拉·黑格尔斯塔德。我无话可说。)

答案 9 :(得分:0)

只想指出一点,即是linter会拒绝监听器声明上的换行符,即:

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

短毛绒没有多大帮助,并且文档也没有照常进行覆盖

答案 10 :(得分:0)

由于在导出函数名称开头加了下划线,所以我遇到了这种情况。您可以通过以下方法自己进行测试:

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,而其他将展开。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

自从有了

exports.yourFunctionName = functions.firestore.document

您需要查看的是.document

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

所以这将不起作用

/level1/{level1Id}/level2 <-它指向一个集合

将起作用

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

云功能将在文档具有操作

时查找

希望这对任何人都有帮助