这个问题比我倾向于在这里提出的问题要简单一些,但是我一直在努力寻找解决方案,我绝对不能-

Google Cloud Platform HTTP函数是否支持Route Parameters(如此处所示)? http://expressjs.com/en/guide/routing.html#route-parameters

具体来说,我看到Google Cloud Platform HTTP函数似乎以Express为基础,但是我看到的所有函数的任何示例都已经使用了req和res参数,而其他都没有。我可以访问正文中的数据,但这不允许我从路由中提取参数,例如在传递给“/users/:userId/books/:bookId”的请求中查找书ID。我无法看到无法将它们填充到req.params中,而无法指定路径的哪一部分与此处的名称相对应。

我知道我总是可以用其他方式传递它们,但这更干净,更符合我们要使用的设置,因此,我真的很想让它可行。有什么办法可以使我完全丢失或者完全不支持此操作?

最佳答案

我可以与支持小组联系,看来是的,这是受支持的-您只需要使用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');
    }
}

然后,用于部署此代码的命令行代码将类似于gcloud beta functions deploy myFunction --stage-bucket<STORAGE_BUCKET> --trigger-http(此命令here的完整文档)。然后,新的端点URL将为https://<YOUR_REGION>-<YOUR_PROJECT_ID>.cloudfunctions.net/myFunction,然后您可以在实际进行调用时(例如,对get进行https://<YOUR_REGION>-<YOUR_PROJECT_ID>.cloudfunctions.net/myFunction/paramA/paramB/not-a-param/paramC/also-not-a-param/paramD调用)在其后附加后续查询或路由参数。

请注意:
  • 除非使用--entry-point标志,否则应该以与CLI中使用的名称相同的名称导出函数。该名称将用于您产生的URL中。
  • --stage-bucket <STORAGE_BUCKET>命令是可选的,但我一直使用它。
  • Cloud Functions将自动查找名为index.jsfunction.js的文件以查找您的函数,但是如果您提供的package.json文件包含main条目,则Cloud Functions将查找它。
  • 我假设这会在某些时候离开beta,在这一点上您应该更新到新的命令工具。
  • 10-06 04:28
    查看更多