【发布时间】:2021-10-12 20:06:56
【问题描述】:
所以,事实证明我一直都拥有它,但我错误地注销了它。我一直在做一个 Object.keys(event).forEach 和控制台记录每个键和值。我猜这没有显示值,因为它是一个嵌套对象。根据@robC3 的回答,使用 JSON.stringify 可以正确显示所有嵌套对象和值,而且也更容易! TL;DR 只需在网关路径中使用大括号,它们就会出现在 event.pathParameters.whateverYouCalledThem 中
我习惯于表达你只需在你的路线中写/stuff/:things 然后req.params.things 在你的处理程序中用于“东西”的地方。
我正在努力在 CDK 中获得相同的基本功能。我有一个名为“api”的 RestAPI 和类似的资源......
const api = new apigateway.RestApi(this, "image-cache-api", { //options })
const stuff = api.root.addResource("stuff")
const stuffWithId = get.addResource("{id}")
stuffWithId.addMethod("GET", new apigateway.LambdaIntegration(stuffLambda, options))
然后我部署函数并在https://<api path>/stuff/1234调用它
然后在我的 lambda 中检查 event.pathParameters 是这样的:{id: undefined}
我查看了事件对象,唯一能看到 1234 的地方是路径 /stuff/1234,虽然我可以从中解析出来,但我确定这不是它应该的样子工作。
:/
我在谷歌搜索时发现的大部分内容都提到了“映射模板”。对于这样一个常见的用例来说,这似乎过于复杂,所以我一直在努力假设会有某种默认映射。现在我开始认为没有。我真的必须指定一个映射模板才能访问路径参数吗?如果是这样,它应该放在我的 CDK 堆栈代码中的什么位置?
我尝试了以下...
stuffWithId.addMethod("GET", new apigateway.LambdaIntegration(stuffLambda, {
requestTemplate: {
"id": "$input.params('id')",
}
}))
但出现错误...
error TS2559: Type '{ requestTemplate: { id: string; }; }' has no properties in common with type 'LambdaIntegrationOptions'.
我很困惑是否需要 requestTemplate、requestParametes 或其他东西,因为到目前为止我发现的所有示例都是针对控制台而不是 CDK。
【问题讨论】:
标签: amazon-web-services aws-lambda aws-api-gateway