【问题标题】:Not able to access a string value in aws lambda function from AWS API request无法从 AWS API 请求访问 aws lambda 函数中的字符串值
【发布时间】:2017-07-06 13:52:25
【问题描述】:

我创建了一个示例 AWS lambda 函数并将该函数与 AWS API 集成。

我在 API 中编写了一个 post 方法,并选择了请求集成映射如下的应用程序/JSON。

{
    'songTitle':"$input.params('songTitle')"
}

songTitle 正在作为参数(应用程序/JSON)与 API 请求一起发送。

但是我收到 $input.params() 为空。

由于我是新手,所以我不知道正确的方法是什么。

请指导访问这些参数

【问题讨论】:

  • 只要传入{ 'songTitle': 'Some Random Song Titles' },你应该可以通过调用event.songTitle得到歌名
  • @DylanLaw 我也试过了。 event.songTitle 返回空。
  • 也许您可以向我们展示您的 lambda 函数以及如何调用 lambda 函数?
  • Lambda 如下:exports.handler = (event, context, callback) => { console.log('songTitle'+JSON.stringify(event.songTitle)); var song = JSON.parse(event.songTitle);回调(空,歌曲); };并且 api 中的正文映射模板为 (application/json) { 'songTitle':"$input.params('songTitle')" } 我正在使用邮递员调用 api,方法是 POST
  • event.songTitle 是一个字符串。不是 JSON。如果你运行console.log(event.songTitle);,你应该得到你想要的东西。

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


【解决方案1】:

我不确定这是否是您的问题,但单引号与 JSON 中的双引号不同。映射模板中未使用 $ 字符转义的任何内容都按原样写入实际有效负载中。

应该是:

{
    "songTitle":"$input.params('songTitle')"
}

编辑:如果这不起作用,还请通过将请求中的 Content-Type 标头作为 application/json 发送来进行测试。如果你根本不发送 Content-Type,它应该默认为 application/json 映射模板。

【讨论】:

  • 我找到了解决方案,但今天在这里发布。当我们从请求的主体部分读取值时,我们应该使用不同的语法。使用 $input.path('$.key_from_request_body');
【解决方案2】:

如果从请求头部分读取输入参数(用于请求集成映射) 语法:

{
    'songTitle':"$input.params('songTitle')"
}

如果我们想从请求正文部分读取参数,我们应该写成

{
    'songTitle':"$input.path('$.songTitle')"`enter code here`
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2023-03-28
    • 2021-07-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多