无法在AWS中读取查询参数

时间:2017-10-05 08:16:24

标签: amazon-web-services aws-lambda aws-api-gateway

我想将API网关中的查询参数传递给AWS Lambda,但我总是收到null个值。

这是我的Lambda函数,我只想返回http://foo.bar的值? name = Dan

'use strict';

exports.handle = (context, event, callback) => {
  callback(null, event.name);
}

在API网关中,我做了以下工作:

  1. 创建资源
  2. 创建方法(GET
  3. 选择了正确的Lambda函数
  4. 选择了我的GET方法并点击了Integration Request
  5. 已选择Body Mapping Templates
  6. 将内容类型设置为application/json
  7. 已添加{"name": "$input.params('name')" }
  8. 保存并部署!
  9. 但是,当我加载API时,event.name的值始终为null。访问API是通过...amazonaws.com/beta/user?name=dan

    完成的

    编辑:我已经尝试了接受的答案here,但在回调中简单地返回事件后,我只收到了这些数据:

    {
      "callbackWaitsForEmptyEventLoop": true,
      "logGroupName": "",
      "logStreamName": "",
      "functionName": "",
      "memoryLimitInMB": "",
      "functionVersion": "",
      "invokeid": "",
      "awsRequestId": "",
      "invokedFunctionArn": ""
    }
    

    我省略了这些值。

2 个答案:

答案 0 :(得分:3)

contextevent的函数参数展示位置错位。更改其位置如下

'use strict';

exports.handle = (event, context, callback) => {
   callback(null, event.name);
}

答案 1 :(得分:2)

即使我之前遇到过同样的问题,我也修改了下面的身体映射模板。请试一试。

#set($inputRoot = $input.path('$'))
{    
"name" : "$input.params('$.name')"
}

如果您使用路径参数,请尝试以下,

#set($inputRoot = $input.path('$'))
{
"name" : "$input.path('$.name')"
}