在用Node编写的AWS lambda中,我想通过API网关进行GET调用时提取URL的以下部分:
/devices/{id} --> {id} will be replaced by a value, and that is the value I want!
我知道要获取QueryStringParameters,您只需使用
event.queryStringParameters.[parameter name]
但是我将如何针对路径参数执行此操作,例如上面的{id}。还有一个可以全面了解如何在节点中编写用于API的Lambda的好地方吗?
答案 0 :(得分:2)
我假设您在这里使用的是lambda代理,我正在为lambda代理粘贴事件对象示例。
{
"message": "Good day, John of Seattle. Happy Friday!",
"input": {
"resource": "/{proxy+}",
"path": "/Seattle",
"httpMethod": "POST",
"headers": {
"day": "Friday"
},
"queryStringParameters": {
"time": "morning"
},
"pathParameters": {
"proxy": "Seattle"
},
"stageVariables": null,
"requestContext": {
"path": "/{proxy+}",
"accountId": "123456789012",
"resourceId": "nl9h80",
"stage": "test-invoke-stage",
"requestId": "test-invoke-request",
"identity": {
"cognitoIdentityPoolId": null,
"accountId": "123456789012",
"cognitoIdentityId": null,
"caller": "AIDXXX...XXVJZG",
"apiKey": "test-invoke-api-key",
"sourceIp": "test-invoke-source-ip",
"accessKey": "ASIXXX...XXDQ5A",
"cognitoAuthenticationType": null,
"cognitoAuthenticationProvider": null,
"userArn": "arn:aws:iam::123456789012:user/kdeding",
"userAgent": "Apache-HttpClient/4.5.x (Java/1.8.0_131)",
"user": "AIDXXX...XXVJZG"
},
"resourcePath": "/{proxy+}",
"httpMethod": "POST",
"apiId": "r275xc9bmd"
},
"body": "{ \"callerName\": \"John\" }",
"isBase64Encoded": false
}
}
可以从事件对象的“ path”键中提取路径,可以从event.path中访问该路径,然后您可以使用字符串操作功能进一步对其进行操作。
希望对您有帮助!
答案 1 :(得分:2)
简短答案:
const { id } = event.pathParameters;
我最近发布了一个简短的培训视频,详细演示了如何创建API Gateway REST API并将其与AWS Lambda(NodeJS)集成。请在此处查看:
答案 2 :(得分:2)
在资源路径中使用方括号,如上图所示。然后在node.js用户中使用以下代码:
exports.handler = async function(event) {
let serviceId = event.pathParameters.id;
}
答案 3 :(得分:0)
解决方案与您最初提到的解决方案非常相似。只需使用event.pathParameters
而不是event.queryStringParameters
。
答案 4 :(得分:0)
在这里,我使用/ api / test / {id}作为我的资源路径,并使用Lambda代理集成。当我按下https://www.dummyapi.com/dev/api/test/id-123456
时,发生以下事件