使用Node在Amazon Lambda中获取路径参数

时间:2018-12-30 07:31:00

标签: node.js amazon-web-services api aws-lambda

在用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的好地方吗?

5 个答案:

答案 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)集成。请在此处查看:

Serverless Architecture: AWS API Gateway & Lambda

答案 2 :(得分:2)

在资源路径中使用方括号,如上图所示。然后在node.js用户中使用以下代码:

exports.handler = async function(event) {
    let serviceId = event.pathParameters.id;
}

enter image description here

答案 3 :(得分:0)

解决方案与您最初提到的解决方案非常相似。只需使用event.pathParameters而不是event.queryStringParameters

答案 4 :(得分:0)

Use a curly brace to configure path variable on AWS API Gateway.

在这里,我使用/ api / test / {id}作为我的资源路径,并使用Lambda代理集成。当我按下https://www.dummyapi.com/dev/api/test/id-123456

时,发生以下事件

enter image description here