gpt4 book ai didi

javascript - CORS BLOCKED 'Access-Control-Allow-Origin' Firebase 功能不允许

转载 作者:行者123 更新时间:2023-12-01 15:45:58 25 4
gpt4 key购买 nike

firebase 发送数据时出错数据库:

Access to fetch at 'https://us-central1-pwagram-f39a5.cloudfunctions.net/storePostData' from origin 'http://localhost:3030' 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. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled



我在使用 cors 更改端点时遇到了这个问题部署到 firebase 后.但是在本地主机上运行时只有一个错误。我需要它才能在 localhost 上工作,因为我仍在使用它进行开发。

首先,我运行: npm install firebase-admin cors --save
这是我的 包.json 在文件夹 firebase功能:
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "8"
},
"dependencies": {
"cors": "^2.8.5",
"firebase-admin": "^8.9.1",
"firebase-functions": "^3.3.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"firebase-functions-test": "^0.1.6"
},
"private": true
}



这里是 index.js 文件我需要 cors 模块:
var functions = require('firebase-functions');
var admin = require('firebase-admin');
const cors = require('cors')({origin: true});


exports.storePostData = functions.https.onRequest(function(request, response) {
return cors(function(request, response) {

admin.database().ref('posts').push({
id: request.body.id,
title: request.body.title,
location: request.body.location,
image: request.body.image
})
.then(function() {
return response.status(201).json({message: 'Data stored', id:request.body.id});
})
.catch(function(err) {
return response.status(500).json({error: err});
});
});
});


这是我的 sw.js 使用函数 firebase 的函数,但不工作:
self.addEventListener('sync', function(event) {
console.log('[Service Worker] Background syncing', event);
if (event.tag === 'sync-new-posts') {
console.log('[Service Worker] Syncing new Posts');
event.waitUntil(
readAllData('sync-posts')
.then(function(data) {
for (var dt of data) {
fetch('https://myFirebaseFUnctionLink/storePostData', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: dt.id,
title: dt.title,
location: dt.location,
image: 'https://myfirebaselink/'
})
})
.then(function(res) {
console.log('Sent data', res);
if (res.ok) {
deleteItemFromData('sync-posts', dt.id); // Isn't working correctly!
}
})
.catch(function(err) {
console.log('Error while sending data', err);
});
}

})
);
}
});


当我更改 https://myFirebaseFUnctionLink/storePostData使用正常的 firebase 数据库链接 .json它的工作正常。

此错误发生在 firebase功能 :
TypeError: Cannot read property 'origin' of undefined
at /srv/node_modules/cors/lib/index.js:219:40
at optionsCallback (/srv/node_modules/cors/lib/index.js:199:9)
at corsMiddleware (/srv/node_modules/cors/lib/index.js:204:7)
at /srv/index.js:9:9
at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:49:9)
at /worker/worker.js:783:7
at /worker/worker.js:766:11
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at process._tickDomainCallback (internal/process/next_tick.js:219:9)

最佳答案

我有同样的问题。重点是 cors 方法的语法。它需要 3 个参数:req、res、一个函数

return cors(req, res, function () {
admin
.database()
.ref('posts')
.push(req.body)
.then(function () {
return res.status(201).json({
message: 'Data stored',
id: req.body.id,
});
})
.catch(function (err) {
return res.status(500).json({
error: err,
});
});
});

关于javascript - CORS BLOCKED 'Access-Control-Allow-Origin' Firebase 功能不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59799252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com