我正在使用Firebase函数,并试图对我的api进行版本化。我正在使用快递作为所有的教程建议。然而,使用此解决方案,我们使用Firebase托管而不是云函数。
托管: https://xxxx.firebaseapp.com
云函数: https://xxxx.cloudfunctions.net
最接近我正在寻找的解决方案是这 。
const app1 = express();
app1.use(cors({ origin: true }));
app1.get("*", (request, response) => {
if(request.url.includes("/v1/")){
response.send("V1: "+request.path);
}
else{
response.send("V2: "+request.path);
}
});
const stats = functions.https.onRequest(app1);
module.exports = {
stats
};但是,在Firebase函数中只能看到一个函数:
https://xxxx.cloudfunctions.net/stats此外,您只能处理一种HTTP请求(GET、POST等)。
我正在寻找的是在Firebase函数中拥有:
https://xxxx.cloudfunctions.net/stats/v1/ (including GET, POST, PUT or in another case separate functions with “/:userId” “/save”, etc)
https://xxxx.cloudfunctions.net/stats/v2/
https://xxxx.cloudfunctions.net/item/v1/可以用云函数来完成吗?
发布于 2019-08-10 13:04:34
最后,我用这样的方式解决了这个问题:
const express = require("express")
const getUserFunctions = express();
getUserFunctions.get("/stats", (request, response) => {
...
...
});
const v1 = functions.https.onRequest(getUserFunctions);
module.exports = {
v1,
v2
};端点应该是这样的:
https://xxxx.cloudfunctions.net/v1/stats发布于 2018-12-05 17:42:52
每个路径都可以指向一个不同的函数(或Express应用程序)。在您的firebase.json文件中配置如下所示。你根本不需要一个单独的域名。下面的firebase.json结果是
https://example.com is handled by firebase hosting https://example.com/v1 is handled by firebase function https://example.com/v2 is handled by firebase function https://example.com/v3 is handled by firebase function
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"hosting": {
"public": "public",
"cleanUrls": true,
"trailingSlash": false,
"rewrites": [
{
"source": "/v1",
"function": "v1"
},
{
"source": "/v2",
"function": "v2"
},
{
"source": "/v3",
"function": "v3"
}
],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
},
"storage": {
"rules": "storage.rules"
},
"functions": {
"source": "functions"
}
}发布于 2018-12-05 16:29:39
预计您只会看到一个函数,它的名称是从index.js导出的。所有URL必须通过这个函数锚定。看起来,您希望/stats/*和/items/*都将通过您的函数进行路由,但这不是它的工作方式。
如果您想要不同的路径前缀,您要么需要不同的函数来处理它们,要么您需要为它们设置一个单一的公共前缀。例如,您可以导出一个名为"api“的函数,然后使用它处理所有不同类型的查询:
/api/stats/...
/api/items/...您还可以考虑对每个不同版本的api使用不同的函数(Express应用程序),让Firebase将不同版本的应用程序路由到不同的应用程序,而不是让一个应用程序在运行时检查版本。
https://stackoverflow.com/questions/53631628
复制相似问题