Node.js Firebase云功能路由
如何在HTTP触发器Firebase云函数中处理/user/:id和/user/:id/report等路径,并访问paramid? 我不喜欢下一个解决方案,因为我的所有函数都是前缀为/api的函数的一部分:Node.js Firebase云功能路由,node.js,express,firebase,google-cloud-functions,Node.js,Express,Firebase,Google Cloud Functions,如何在HTTP触发器Firebase云函数中处理/user/:id和/user/:id/report等路径,并访问paramid? 我不喜欢下一个解决方案,因为我的所有函数都是前缀为/api的函数的一部分: const app = require('express')(); exports.api= functions.https.onRequest(app); app.get('/user/:uid/report', (req, res) => {}): 但我需要这样的东西: expo
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) => {
// ...
});
更新:
不可能在托管路由中使用通配符并从中获取参数您可以使用托管重写将URL映射到这样的函数
"rewrites": [
{
"source": "/user/*/report",
"function": "myFunction"
}
]
但是您必须自己处理URL以提取每个参数您可以使用Firebase云上托管功能为Firebase重写URL以适合您想要的路径。这意味着您必须再次
firebase init
,并添加主机(如果还没有)
在您的项目firebase.json
中,您必须添加一个
{
"hosting": {
"rewrites": [
{
"source": "/**",
"function": "api"
}
]
}
}
部署时,输出中将为您提供一个托管URL。使用此函数而不是函数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);
我认为这不是一个好的解决方案,因为最终我在云上只有一个函数来配置超时和内存,对吗?没错。但在托管重写时不能使用通配符,因此不能将通配符路径重定向到常规https函数。这就是我们今天所拥有的一切。请随时输入一个功能请求来描述您的情况:我的答案有效,您可以在URL中使用通配符检查文档。很抱歉,我之前的回答很粗鲁,根据文档,URL是全局符号,因此您可以在其中添加*。下面是我在firebase云函数中实现的api示例