这个问题比我倾向于在这里提出的问题要简单一些,但是我一直在努力寻找解决方案,我绝对不能-
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>
命令是可选的,但我一直使用它。 index.js
或function.js
的文件以查找您的函数,但是如果您提供的package.json
文件包含main
条目,则Cloud Functions将查找它。