我目前有一个Firebase应用程序,当我使用localhost:5001调用函数时,它可以在本地运行;但是,当我在直接路由时尝试使用云功能时,出现错误:FORBIDDEN,并且当我尝试从已部署的Firebase应用程序直接获取时,出现CORS错误。
前端调用服务,该服务从后端获取数据。
const requestOptions = {
method: 'GET',
mode: 'cors',
headers: new Headers({ 'Content-Type': 'application/json' })
};
return fetch("https://us-central1-polling-269dc.cloudfunctions.net/api/polls/get", requestOptions).then(handleResponse);
我也尝试过只在上面没有模式和标题,但这是行不通的。提取已正确调用,但是在https://polling-269dc.firebaseapp.com/#/的加载页面上,我收到以下错误消息:
通过CORS策略阻止从原点“ https://us-central1-polling-269dc.cloudfunctions.net/api/polls/get”到“ https://polling-269dc.firebaseapp.com”的访存:所请求的资源上没有“ Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”以在禁用CORS的情况下获取资源。
在我的index.js的功能文件夹中,这是功能和必要条件的导入:
const functions = require('firebase-functions');
const express = require('express');
const app = express();
const fire = require("./fire.js");
var database = fire.database();
var auth = fire.auth();
app.get("api/polls/get/", (req, res) => {
var ref = database.ref("polls/");
var query = ref.orderByChild("question");
var sum = [];
query.once("value", (snap) => {
snap.forEach( (childSnap) => {
sum.push(childSnap.val());
});
res.json(sum);
});
});
我也尝试过
app.get("https://us-central1-polling-269dc.cloudfunctions.net/api/polls/get/", (req, res) => {
具有相似结果。我怀疑我输入了错误的URL,或者我需要准备一些东西,但找不到有关它的信息。
这是我的firebase.json,也许这里出问题了吗?
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "client/build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [ {
"source": "**",
"function": "app"
} ]
},
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]
}
}
同样,当我使用本地主机并使用firebase serve时,此方法有效,但我试图通过在线进行Firebase部署来解决。预先感谢。
答案 0 :(得分:0)
好的,所以我找出了问题;您需要在调用中添加导出的函数集的名称。我的电话应该是:
https://us-central1-polling-269dc.cloudfunctions.net/app/api/polls/get
代替
https://us-central1-polling-269dc.cloudfunctions.net/api/polls/get
我希望这对遇到类似问题的人有所帮助!