我创建了一个Firebase可调用函数,带有简单的文本返回,但是在本地和部署的应用程序上调用该函数时收到错误。
callable函数是一个简单的函数,可以立即返回一些文本:
exports.getSomeInfo = functions.https.onCall(async (data, context) => {
return 'some info';
});
在我的应用程序中,我使用以下命令加载该函数:
const getSomeInfo = firebase.functions().httpsCallable('getSomeInfo');
并使用以下命令在应用中调用它:
getSomeInfo();
这将产生以下错误:
Failed to load https://us-central1-[project-ID].cloudfunctions.net/getSomeInfo: Response for preflight is invalid (redirect)
使用firebase serve
在本地和已部署的应用程序上调用函数时,会发生此错误。
在Firebase控制台中查看日志不会显示任何日志或错误。
其他问题提到这可能是CORS问题或不正确的Firebase配置。我确保Firebase配置正确。并尝试了一些CORS解决方案,但仍继续收到上述错误。
使用Firebase@5.5.2。
还有什么可能导致此错误?
答案 0 :(得分:3)
如documentation所示,对于HTTPS Callable函数,您需要“返回可以JSON编码的数据” 。
因此,如果您执行以下操作,那么它应该可以工作。
exports.getSomeInfo = functions.https.onCall((data, context) => {
return {result: 'some info'};
});
更新:删除了async
答案 1 :(得分:2)
2020年4月,我刚刚学到了可调用函数的模块名称带有前缀的困难方式...
在index.js中:
const functions = require('firebase-functions')
// ...
exports.callable = require('./callable')
在callable.js中:
const functions = require('firebase-functions');
// ... other stuff
exports.myCloudFunction = functions.https.onCall((data, context) => {
// ...
从JS客户端调用此“ myCloudFunction”的方法是使用其名称以其模块名称开头,例如
const fn = firebase.functions().httpsCallable("callable-myCloudFunction")
fn().then(result => { //...
据我所知,这没有记载,而且,正如其他人所提到的,几乎在实际执行云功能之前发生的任何错误最终都被错误地标记为CORS错误。
答案 2 :(得分:0)
几天前发生在我身上。问题是当我运行for(DBClient client : register.getALl()){
System.out.println(client);
}
System.out.println(check[0]+" "+check[1]);
if(register.getALl().contains(new DBClient(check[0],check[1]))){
时,我的src目录中的函数没有被编译。出现打字错误,导致无法编译。您可以通过检查其中的lib文件夹和index.ts来查看它是否已编译。
答案 3 :(得分:0)
尝试使用CORS进行各种刷新/清理和工作2天后,终于发现它可以正常工作,首先要通过Firebase控制台删除该功能,然后再部署该功能。
就我而言,似乎已部署的版本以某种方式损坏。它从昨天开始,那时deploy
的功能卡住了-它会挂起并且永远不会退出-即使Firebase Status页面说一切都很好。它持续了整整一整天,我终于放手了一下,看看今天是否可以使用。我以为是我的代码,但是deploy
今天又恢复了工作。