Firebase Cloud 函数路由



如何在 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) => {
   // ...
});

更新:在托管路由中使用通配符并从中获取参数是不可能的

您可以在 Cloud Functions for Firebase 之上

使用 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);

最新更新