如您所知,由于CORS
,我们无法在客户端获取url
。我正在尝试创建一个函数,该函数将作为代理为我获取具有正确标头的文件,并将其返回给客户端。
因此,在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
。
您是否尝试过使用nodejs中的cors-lib。您可以为cors进行配置,以允许在您的实例中使用cors。首次安装cors-lib:
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);
})