【问题标题】:Firebase function shows error on opening firebase function URLFirebase 函数在打开 firebase 函数 URL 时显示错误
【发布时间】:2019-05-02 09:58:01
【问题描述】:

所以我有一个场景,当我打开 firebase 函数的 url - https://us-central1-geochatterthing.cloudfunctions.net/getWall

我收到以下错误:

{"error":{"status":"INVALID_ARGUMENT","message":"Bad Request"}}

另外,我在 Cloud Functions 中的 getWall 函数如下图所示。

下面是 api-http.js 文件的链接:

https://gist.github.com/shubham6996/53cea6696b6d565b7f1ffce53bdaabf4

更新问题:

使用以下代码从我的 React Native 应用程序调用此函数:

const wallFunc = firebase.functions().httpsCallable('getWall');

let result = await wallFunc({size: 15});

当我使用以下代码检查result 的输出时:

console.log("Show result = "+JSON.stringify(result, this.getCircularReplacer()));

 getCircularReplacer = () => {
        const seen = new WeakSet();
        return (key, value) => {
          if (typeof value === "object" && value !== null) {
            if (seen.has(value)) {
              return;
            }
            seen.add(value);
          }
          return value;
        };
    };

上面的代码在控制台中显示了下面的输出:

显示结果 = {"data":{"docs":[{"sort":[1530702073924],"id":"04dhcfzDZbNLZoekfhl3"}],"hits":1}}

这里的“id”:04dhcfzDZbNLZoekfhl3 是从 Firebase 数据库集合中获取的文档的 ID。但我希望能够从该集合中获取每个文档的数据,而不仅仅是一个文档。

另外,一开始我提到的错误 "status":"INVALID_ARGUMENT" ,我发现了这个错误的一些东西:

如果调用了客户端触发器,但请求错误 格式,例如不是 JSON、具有无效字段或缺少 数据字段,请求被 400 Bad Request 拒绝, INVALID_ARGUMENT 的错误代码。

来源:https://firebase.google.com/docs/functions/callable-reference

在我的应用程序中,当我使用

调用可调用函数时
const wallFunc = firebase.functions().httpsCallable('getWall');

let result = await wallFunc({size: 15});

我确实在这里将大小作为参数传递,但我不知道我是否在这里遗漏了什么。

api-http.js 文件中,在这个文件的第 36 行,它显示数据有 2 个对象大小和来自,而我只传递大小参数。

附: - 我在这里解释我的问题可能是错误的,因为我实际上是在重新设计这个应用程序。所以我对这里的正确方法感到困惑。

【问题讨论】:

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


    【解决方案1】:

    显然你混淆了Callable Cloud FunctionsHTTP Cloud Functions

    当您通过 URL (https://us-central1-geochatterthing.cloudfunctions.net/getWall) 直接调用云函数时,这意味着该云函数是 HTTP 函数。

    但从 Cloud Function 代码 (_firebase.functions.https.onCall()) 看来,它是可调用的。

    因此,您应该按照从 React Native 应用程序调用它的方式来调用它(参见问题中的代码),而不是通过 URL。另请参阅文档的此特定部分:https://firebase.google.com/docs/functions/callable#call_the_function

    【讨论】:

    • 嘿,我确实浏览了您推荐给我的所有内容,但到目前为止还没有弄清楚任何事情。你能检查我更新的问题吗?我对这个问题和一个额外的信息有一点不同的方法。
    • 我不明白为什么要通过 URL 调用 Callable 函数,而不是文档中解释的方式。你有一些具体的限制吗?
    • 顺便说一句,如果您认为我的回答是“有用且经过充分研究”,您可以投票赞成,请参阅 stackoverflow.com/help/someone-answers。您也应该对收到的其他问题之一的答案执行相同操作:stackoverflow.com/a/55747225/3371862
    • 如文档中所述,您指的是:“如果您能够使用 Android、iOS 或 Web SDK,建议您这样做 而不是直接实现此协议。SDK 提供了节省编码工作量的功能,详见从您的应用调用函数 (firebase.google.com/docs/functions/callable)。”。显然,您的 Callable Cloud Function 仅获取一个文档。您可以修改它以调用多个文档(这将在 Cloud Function 代码本身中完成)或者您从前端多次调用它(可能不是最有效的方式.. .)
    猜你喜欢
    • 2020-12-06
    • 2018-08-01
    • 2019-10-21
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2017-12-12
    • 2018-09-13
    相关资源
    最近更新 更多