Google Cloud Platform HTTP功能是否支持路由参数?

Amb*_* B. 8 google-cloud-platform google-cloud-functions

这个问题比我喜欢来这里的问题要简单一些,但是我一直在试图寻找答案,我绝对不能 -

Google Cloud Platform HTTP功能是否支持路由参数,如此处所示?http://expressjs.com/en/guide/routing.html#route-parameters

具体来说,我看到谷歌云平台HTTP功能似乎使用Express作为基础,但我看到的任何功能的所有功能都已经运行了req和res参数而没有别的.我可以访问正文中的数据,但这不允许我从路径中提取参数,例如在传递给"/ users /:userId/books /:bookId"的请求中查找书籍ID.我无法看到如何将它们填充到req.params中,而无法指定路径的哪个部分对应于此处的名称.

我知道我总是可以用另一种方式传递它们,但这更干净,更符合我们想要使用的设置,所以我真的希望尽可能让它工作.有没有办法做到这一点,我完全失踪或根本不支持?

Amb*_* B. 10

我能够联系支持小组,看起来是的,这是支持的 - 你只需要使用req.path来拉出完整路径,然后以某种方式解析它(我使用path-to -regexp)

示例代码:

exports.myFunction = function(req, res) {
    var keys = [];
    var re = pathToRegexp('/:paramA/:paramB/not-a-param/:paramC/also-not-a-param/:paramD?', keys, {strict: false});
    var pathVars = re.exec(req.path);
    if (pathVars) {
        console.log(JSON.stringify(pathVars));
        var paramA = pathVars[1];
        var paramB = pathVars[2];
        var paramC = pathVars[3];
        var paramD = pathVars[4];
        // Do stuff with the rest of your functionality here
        res.status(200).send('Whatever you wanna send');
    }
}
Run Code Online (Sandbox Code Playgroud)

命令行代码部署那么这将是这个样子gcloud beta functions deploy myFunction --stage-bucket<STORAGE_BUCKET> --trigger-http(该命令的完整文档在这里).然后https://<YOUR_REGION>-<YOUR_PROJECT_ID>.cloudfunctions.net/myFunction,您的新端点URL就会出现,然后您可以在实际拨打电话时附加后续查询或路由参数(例如,get拨打电话https://<YOUR_REGION>-<YOUR_PROJECT_ID>.cloudfunctions.net/myFunction/paramA/paramB/not-a-param/paramC/also-not-a-param/paramD).

请注意:

  1. 除非使用该--entry-point标志,否则应以与CLI中使用的名称相同的名称导出您的函数.此名称将用于生成的URL.
  2. --stage-bucket <STORAGE_BUCKET>命令是可选的,但我总是使用它.
  3. 云功能将自动查找名为index.jsfunction.js找到您的功能的package.json文件,但如果您提供包含main条目的文件,则云功能将查找它.
  4. 我认为,这将在某个时刻保留测试版,您应该更新到新的命令工具.

  • @jacob啊,是的,谷歌文档是我的经验混乱.我继续编辑我的答案以获得一些额外的CLI /控制台部署信息,我希望这些信息会有所帮助. (2认同)
  • 如果有人在 2020 年回到这个问题:您可以直接将 Express 应用程序导出为您的函数,并且所有正常的路由内容都将起作用。这是一个关于它的好博客:https://medium.com/google-cloud/express-routing-with-google-cloud-functions-36fb55885c68 (2认同)