从Firebase托管的应用程序调用Axios Cloudrun服务时出现CORS错误

从Firebase托管的应用程序调用Axios Cloudrun服务时出现CORS错误,firebase,cors,google-cloud-run,Firebase,Cors,Google Cloud Run,这看起来很明显,但我已经想了好几天了,但仍然无法让它发挥作用。请有人指出我遗漏了什么 我正在尝试从firebase托管的SPA向我的云运行服务打axios电话。为了解决这个问题,我遵循了[firebase教程for cloud run]中概述的步骤 本教程的第4步介绍如何设置“重写”以使用firebase域作为云运行服务的代理。它说helloworld服务可以通过 您的Firebase子域: projectd.web.app/helloworld和projectd.firebaseapp.com

这看起来很明显,但我已经想了好几天了,但仍然无法让它发挥作用。请有人指出我遗漏了什么

我正在尝试从firebase托管的SPA向我的云运行服务打axios电话。为了解决这个问题,我遵循了[firebase教程for cloud run]中概述的步骤

本教程的第4步介绍如何设置“重写”以使用firebase域作为云运行服务的代理。它说helloworld服务可以通过

您的Firebase子域: projectd.web.app/helloworld和projectd.firebaseapp.com/helloworld

因此,我按照这些步骤部署服务。然后,我尝试从SPA拨打axios电话,如下所示

testHelloWorld () {
  axios.get(`https://myProjectId.firebaseapp.com/helloworld`)
     .then((data) => {
       console.log(data)
     })
     .catch(ex => {
        console.error(ex)
     })
  })
}
但是我得到了CORS的错误

CORS策略已阻止从源站访问位于的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源站”标头

声明这应该是可能的,所以我不确定我做错了什么

注:

在调试过程中,我从教程中更新了node应用程序,添加了cors支持,如下所示。还是不行

const express = require('express');
const app = express();
const cors = require('cors'); //Imported and added this

app.use(cors()); // Used here

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});


所以这里的问题是,如何使用firebase重写规则对我的云运行服务进行Axios/AJAX调用?

请检查您是否安装了cors:npm install cors

请检查以下两个选项是否可以解决您的问题:

1=使用以下代码:

 app.use(cors({origin:true,credentials: true}));
2如果前面的代码无效,请使用以下代码:


app.get('/', (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  console.log('Hello world received a request.');
}

请让我知道它是否对您有效。

我尝试了这个,但结果相同。从文档中的这个链接来看,云运行服务必须是公开的,而我的则不是