这个问题比我想来这里的问题要简单一些,但我一直在努力寻找答案,但我绝对不能——
谷歌云平台 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
,然后您可以在实际调用电话时向其附加后续查询或路由参数(例如,调用 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>
command 是可选的,但我一直使用它。 index.js
的文件或 function.js
找到您的功能,但如果您提供 package.json
包含 main
的文件条目,然后 Cloud Functions 将改为查找它。 关于google-cloud-platform - Google Cloud Platform HTTP 函数是否支持路由参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145759/