在 Firebase 的云函数中启用 CORS

我目前正在学习如何使用Firebase的新云函数,我遇到的问题是我无法访问通过AJAX请求编写的函数。我收到“没有'访问控制-允许-起源'”错误。以下是我编写的函数示例:

exports.test = functions.https.onRequest((request, response) => {
  response.status(500).send({test: 'Testing functions'});
})

该函数位于此 url 中:https://us-central1-fba-shipper-140ae.cloudfunctions.net/test

Firebase文档建议在函数中添加CORS中间件,我已经尝试过,但它不适合我:https://firebase.google.com/docs/functions/http-events

我是这样做到的:

var cors = require('cors');    

exports.test = functions.https.onRequest((request, response) => {
   cors(request, response, () => {
     response.status(500).send({test: 'Testing functions'});
   })
})

我做错了什么?我将不胜感激任何帮助。

更新:

道格·史蒂文森(Doug Stevenson)的回答有所帮助。添加({origin:true})解决了这个问题,我也不得不改变,起初我完全错过了。response.status(500)response.status(200)


答案 1

Firebase 团队提供了两个示例函数来演示 CORS 的用法:

第二个示例使用与当前使用的 cors 不同的处理方式。

请考虑按如下方式导入,如示例中所示:

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

函数的一般形式将如下所示:

exports.fn = functions.https.onRequest((req, res) => {
    cors(req, res, () => {
        // your function body here - use the provided req and res from cors
    })
});

答案 2

您可以像这样在云中设置 CORS 函数

response.set('Access-Control-Allow-Origin', '*');

无需导入包裹cors