Firebase可调用函数:飞行前响应无效

时间:2018-10-13 11:03:14

标签: firebase google-cloud-functions

我创建了一个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。

还有什么可能导致此错误?

4 个答案:

答案 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今天又恢复了工作。