首页 > 解决方案 > 使用 firebase 函数解决 CORS

问题描述

如您所知,url由于CORS. 我正在尝试创建一个函数,它将使用正确的标头作为代理为我获取文件,并将其返回给客户端。

所以,在Firebase Function

exports.urlToBlob = functions.https.onRequest((request,response) => {
  cors(request, response, () => {

    var url = "https://..."; //request.query.url;
      fetch (
          url,
          {
             method: 'GET',
             headers: { 'Accept': '*/*' }
          }
       )
       .then ((res) => {console.log(res);return res;})

       .catch((err) => response.status(400).send(err))
   });
});

我可以看到它将访问 url 并在 shell模拟器上得到响应,但不是在浏览器上,它不会返回任何内容。

客户假设通过以下方式访问它:

  var url = "https://us-central1-myproject-6xxxx.cloudfunctions.net/urlToBlob";
        $.get(
        url,
        {url :imgurl, platform : 'xxx'},
        function(data) {
              console.log(data);
        }
       );

我知道我做错了,但我必须找到一种方法来使用该功能来解决CORS.

标签: node.jsfirebasegoogle-cloud-functions

解决方案


您是否尝试过使用来自 nodejs 的 cors lib。您可以为 cors 进行配置以允许在您的实例中使用 cors。首先安装cors库:

npm install cors --save

之后,您可以在主模块应用程序中配置 cors。举个例子:

const cors = require('cors')
//cors config
app.use(cors({
  origin: ['https://example.com'] //<-- Here you put the domain you want to call your api
  methods: "GET, POST, PUT, DELETE",
  optionsSuccessStatus:200,
  credentials: true
}))

在您的代码中:

.then ((res) => {console.log(res);return res;})

您应该更改为:

 .then ((res) => {
    console.log(res);
    //return res;
    response.status(200).send(res);
 })

推荐阅读