当我打开firebase函数的网址-https://us-central1-geochatterthing.cloudfunctions.net/getWall
我收到以下错误:
{“错误”:{“状态”:“ INVALID_ARGUMENT”,“消息”:“错误请求”}}
此外,我在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。但是我希望能够从该集合中获取每个文档的数据,而不仅仅是一个文档。
此外,在开头提到的“状态”错误:“ INVALID_ARGUMENT”,我发现了一些与此错误有关的内容:
如果调用了客户端触发器,但是请求有误 格式,例如不是JSON,字段无效或缺少 数据字段,该请求将被拒绝400错误请求,并带有 错误代码为INVALID_ARGUMENT。
来源:https://firebase.google.com/docs/functions/callable-reference
在我的应用程序中,当我使用
调用可调用函数时const wallFunc = firebase.functions().httpsCallable('getWall');
let result = await wallFunc({size: 15});
我在这里确实将size作为参数传递,但是我不知道我是否在这里缺少什么。
在api-http.js文件中,在此文件的第36行,它显示数据的大小为2个对象,而我仅传递size参数。
P.S。 -因为我实际上是在重新设计此应用程序,所以在这里解释我的问题可能是错误的。因此,我对这里的正确方法感到困惑。
答案 0 :(得分:1)
很明显,您正在混用Callable Cloud Functions和HTTP Cloud Functions。
当您直接通过URL(https://us-central1-geochatterthing.cloudfunctions.net/getWall)调用Cloud Function时,这意味着该Cloud Function是一个HTTP功能。
但是从Cloud Function代码(_firebase.functions.https.onCall()
)看来,它是可调用的代码。
因此,您应该使用从React Native应用程序(参见问题中的代码)而不是通过URL调用它的方式来调用它。另请参见文档的此特定部分:https://firebase.google.com/docs/functions/callable#call_the_function