Cors-Firebase云功能中的Access-Control-Allow-Origin错误

时间:2020-05-04 10:42:19

标签: node.js firebase axios cors google-cloud-functions

这是我得到的错误:

Access to XMLHttpRequest at has been blocked by CORS policy: Response to preflight request 
doesn't pass access control check: 
No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是我的云功能:

...
app.use(cors({
  origin: true,
}))
app.use(express.json());
app.use(express.urlencoded({extended: false}));


app.post('/submit', async (req, clientRes) => {
...
}

exports.app = functions.region('europe-west2').runWith({timeoutSeconds: 540, memory: '2GB'}).https.onRequest(app);

这是我从客户端发出的发帖请求:

axios.post('/submit', body, {headers: {
      // 'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json',
    }});

我尝试设置Access-Control-Allow-Origin: '*'Access-Control-Allow-Origin: mydomain.com以及Access-Control-Allow-Origin: cloudFunctionDomain.net,但仍然无法正常工作。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

根据[1],这种导入方式似乎对很多人都有效:

const cors = require('cors')({origin: true});

如[1]中所述,还有一些代码示例,您可以从此处查看[2]。

[1] Enabling CORS in Cloud Functions for Firebase

[2] https://github.com/firebase/functions-samples/

答案 1 :(得分:-1)

您应将Access-Control-Allow-Origin添加到服务器,而不是客户端。所以代替:

app.use(cors({
  origin: true,
}))

您应该使用:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

来源:https://enable-cors.org/server_expressjs.html

相关问题