我用vuejs构建了一个小型web应用程序(www.suntax.de),托管在Google Firebase上。我使用Firebase托管、数据库和函数。我使用函数在后端进行一些计算。
现在一切都在运行,但我在实现这一目标时遇到了一些困难,我希望在工作流程方面有所改进。
因此,我想向你解释一下我做了什么,我现在在哪里挣扎。
首先,我设置vuejs应用程序并将其部署到firebase。我添加了我的自定义域,一切都很好。
后来,我实现了云功能,并想从我的vuejs应用程序中进行调用。
之后
firebase deploy
,我可以在浏览器中调用此函数,它可以正常工作:
https://us-central1-suntax-6d0ea.cloudfunctions.net/calcEEGcompensation?year=2013&month=1&size=10
现在我想,我只是从vuejs应用程序中调用函数的URL。但随后我收到以下错误消息:
[Error] Origin * is not allowed by Access-Control-Allow-Origin.
我当时读到,我必须添加一个
rewrite
中的节
firebase.json
:
现在是我的火力基地。json如下所示:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
// Add the following rewrites section *within* "hosting"
"rewrites": [ {
"source": "/calcEEGcompensation", "function": "calcEEGcompensation"
} ]
}
}
现在,我可以使用以下URL调用我的firebase函数:
https://www.suntax.de/calcEEGcompensation?year=2013&month=1&size=10
在我的vuejs应用程序中集成上述URL后,该应用程序在部署到firebase server后运行良好。
由于我希望不断改进应用程序,所以我希望在部署之前在本地测试所有内容。
我知道我可以通过以下方式在本地运行firebase托管和功能:
firebase serve --only functions,hosting
然而,现在我的应用程序对我的函数进行了硬编码调用
https://www.suntax.de/calcEEGcompensation?year=2013&month=1&size=10
这又导致了错误
[错误]访问控制允许原点不允许原点*。
还可以将URL更改为本地函数
http://localhost:5001/suntax-6d0ea/us-central1/calcEEGcompensation?year=2013&month=1&size=10
导致错误消息
[错误]访问控制允许原点不允许原点*。
通过进一步阅读,我找到了解决方案
cors
。因此,我将功能更改为:
const functions = require('firebase-functions');
const cors = require('cors')({origin: true});
exports.calcEEGcompensation = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const yearOfCommissioning = req.query.year;
const monthOfCommissioning = req.query.month;
const pvsystemsize = req.query.size;
...
res.send("hello");
});
});
这很有帮助,现在一切正常:
-部署的应用程序仍在正常运行。
-我可以在调用本地函数和已部署函数的同时在本地运行应用程序。我只需要更改函数的URL。
但现在我的问题是:
我能以更好的方式解决这个问题吗?如果在本地测试vuejs应用程序和函数,则必须在部署之前更改函数URL。然后我必须在本地测试时将其更改回来。
我无法在没有
cors公司
。
我的理想解决方案是有一个可以在本地进行全面测试的设置,并且可以轻松部署
firebase部署
没有任何更改的网址。这可能吗?
谢谢并致以最良好的问候,
克里斯托夫