google-cloud-platform - Google Cloud Platform HTTP 函数是否支持路由参数?

标签 google-cloud-platform google-cloud-functions

这个问题比我想来这里的问题要简单一些,但我一直在努力寻找答案,但我绝对不能——

谷歌云平台 HTTP 函数是否支持路由参数,如此处? http://expressjs.com/en/guide/routing.html#route-parameters

具体来说,我看到谷歌云平台 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 ,然后您可以在实际调用电话时向其附加后续查询或路由参数(例如,调用 gethttps://<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> command 是可选的,但我一直使用它。
  • Cloud Functions 将自动查找名为 index.js 的文件或 function.js找到您的功能,但如果您提供 package.json包含 main 的文件条目,然后 Cloud Functions 将改为查找它。
  • 我假设这将在某个时候离开 beta,此时您应该更新到新的命令工具。
  • 关于google-cloud-platform - Google Cloud Platform HTTP 函数是否支持路由参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145759/

    相关文章:

    file-upload - Flutter web - 将图像文件上传到 Firebase 存储

    java - Intellij 无法创建 Google AppEngine 项目

    javascript - 您如何让 Google Cloud Functions 仅在从某些 URLS ping 时才起作用?

    python - 无法读取上传到谷歌云存储桶的 csv 文件

    mysql - Google Cloud SQL 上的 Spring Boot - org.hibernate.HibernateException : Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

    firebase - firebase auth onCreate 触发器应该有更多数据吗?

    javascript - 如何调用 Firebase Cloud 函数中的两个函数

    google-cloud-platform - 用于多个文件的云函数 gcp 存储桶事件

    maven - 目前是否有任何方法可以使用 Artifact Registry 镜像官方 Maven 存储库?

    r - 谷歌云AI平台jupyter notebook实例重启后也打不开,正在运行