Node.js Firebase云功能路由

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

如何在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) => {}):
但我需要这样的东西:

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示例