如何在 HTTP Trigger Firebase 云函数中处理/user/:id 和 /user/:id/report 等路径,并访问参数 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) => {
// ...
});
更新:在托管路由中使用通配符并从中获取参数是不可能的
使用 Firebase Hosting 重写网址,以适应您想要的路径。 这意味着您必须再次firebase init
并添加主机(如果尚未添加)。
在您的项目firebase.json
中,您必须添加一个函数重写,以将所有请求发送到托管/**
函数api
:
{
"hosting": {
"rewrites": [
{
"source": "/**",
"function": "api"
}
]
}
}
部署时,输出中会为你提供一个托管 URL。 使用此而不是函数 URL。
现在,在功能前面有托管,您必须能够设置缓存。
您可以使用托管重写将URL映射到这样的函数
"rewrites": [
{
"source": "/user/*/report",
"function": "myFunction"
}
]
但是您必须自己处理URL才能提取每个参数。
我会为每个资源导出一个函数。
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);