如何在Firebase中通过自定义URL获取参数并传递给云函数
如何让Firebase云函数获取自定义URL中的路径参数?
看起来你离解决问题只差一步啦!问题出在你获取参数的方式上——你现在用req.query.bar去拿路径参数,但实际上Firebase托管的重写路径参数是存在req.params对象里的,req.query是用来获取URL中?后面的查询参数(比如?bar=xxx这种),和路径里的参数不是一回事。
下面是具体的修正步骤:
1. 确认Firebase托管重写规则(你的配置其实是对的)
你的firebase.json里的重写规则没问题:
"rewrites": [ { "source": "/:bar*", "function": "foo" }, { "source": "**", "destination": "/index.html" } ]
这里的/:bar*会匹配所有以/开头的路径,把路径部分作为bar参数传递给云函数foo。如果只想匹配单个路径段(比如只接收/parameter而不是/parameter/subpath),可以把source改成"/:bar"(去掉末尾的*)。
2. 修改云函数代码,正确获取路径参数
把函数里的req.query.bar替换成req.params.bar,这样就能拿到URL路径里的参数值了。修改后的代码示例:
exports.foo = functions.https.onRequest((req, res) => { // 路径参数存在req.params中,而非req.query const barValue = req.params.bar; console.log('bar = ' + barValue); console.info(barValue); // 示例:返回参数值给客户端 res.status(200).send(`Received parameter: ${barValue}`); });
3. 部署修改后的配置和函数
别忘了重新部署你的云函数和托管配置,这样修改才会生效:
- 部署云函数:
firebase deploy --only functions - 部署托管配置:
firebase deploy --only hosting
现在当你访问https://<my-project-id>.firebaseapp.com/parameter时,云函数就能正确拿到parameter这个值啦!
内容的提问来源于stack exchange,提问作者prplehayes
相关产品推荐
相关产品推荐

