我正在尝试从React客户端调用Firebase云功能。
我能够使用HTTP请求成功调用这些函数(如here所述)。这需要在云功能中设置完整的Express应用。
现在,我尝试使用httpsCallable()
(如here所述)直接从客户端调用云函数。与通过HTTP请求进行调用相比,此方法似乎具有两个优点。但是,使用这种方法时,出现以下CORS错误:
CORS政策禁止从来源“ https://us-central1-myapp.cloudfunctions.net/helloWorld”访问“ http://localhost:3000”
我如何进行这项工作?值得麻烦吗?真的是首选方式吗?
这是我的云功能:
import * as functions from 'firebase-functions';
export const helloWorld = functions.https.onRequest((request, response) => {
response.send('Hello from Firebase!');
});
这是我从客户那里打电话的方式:
const sayHello = async (): Promise<string> => {
const helloWorld = firebase.functions().httpsCallable('helloWorld');
const result = await helloWorld();
return result.data;
};
答案 0 :(得分:1)
这样做
const helloWorld = firebase.functions().httpsCallable('helloWorld');
const result = await helloWorld();
您确实通过定义如下所示的被调用函数来调用Callable Cloud Function,但是
functions.https.onRequest((request, response) => {})
您正在定义一个HTTPS Cloud Function 与众不同的。
您应将Cloud Function定义为Callable功能,如下所示:
export const helloWorld = = functions.https.onCall((data, context) => {
return { response: 'Hello from Firebase!' };
});