如何在HTTP Trigger Firebase云功能中处理 / user /:id 和 / user /:id / report 等路径并访问param id?
我不喜欢下一个解决方案,因为我的所有功能都是前缀 / api 的功能的一部分:
const app = require('express')();
exports.api= functions.https.onRequest(app);
app.get('/user/:uid/report', (req, res) => {}):
但我需要这样的东西:
exports['/user/:uid/report'] = functions.https.onRequest((req, res) => {
// ...
});
答案 0 :(得分:3)
您可以在Cloud Functions for Firebase上使用Firebase托管来重写URL以适合您想要的路径。这意味着您必须再次firebase init
并添加主机(如果尚未添加)。
在您的项目firebase.json
中,您必须添加function rewrite以将所有请求发送到托管/**
才能运行api
:
{
"hosting": {
"rewrites": [
{
"source": "/**",
"function": "api"
}
]
}
}
部署时,您将在输出中获得托管URL。使用此代替您的功能URL。
现在,在功能面前使用Hosting,您必须能够设置caching。
答案 1 :(得分:2)
您可以使用托管重写将URL映射到此类函数
"rewrites": [
{
"source": "/user/*/report",
"function": "myFunction"
}
]
但是您必须处理自己的URL以提取每个参数
答案 2 :(得分:1)
我将为每个资源导出一个函数。
const router = express.Router();
router.get('/:userid/report', reportGenerator);
// Edit: using router directyly didn't worked for me
// you can also define your routes in the express app object
const app = express();
app.use(router);
exports.user = functions.https.onRequest(app);