Firebase云功能路由

时间:2017-10-20 12:50:52

标签: node.js express firebase google-cloud-functions

如何在HTTP Trigger Firebase云功能中处理 / user /:id / user /:id / report 等路径并访问param 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) => {
   // ...
});

3 个答案:

答案 0 :(得分:3)

您可以在Cloud Functions for Firebase上使用Firebase托管来重写URL以适合您想要的路径。这意味着您必须再次firebase init并添加主机(如果尚未添加)。

在您的项目firebase.json中,您必须添加function rewrite以将所有请求发送到托管/**才能运行api

{
  "hosting": {
    "rewrites": [
      {
        "source": "/**",
        "function": "api"
      }
    ]
  }
}

部署时,您将在输出中获得托管URL。使用此代替您的功能URL。

现在,在功能面前使用Hosting,您必须能够设置caching

答案 1 :(得分:2)

您可以使用托管重写将URL映射到此类函数

"rewrites": [
  {
    "source": "/user/*/report",
    "function": "myFunction"
  }
]

但是您必须处理自己的URL以提取每个参数

答案 2 :(得分:1)

我将为每个资源导出一个函数。

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