json - 无法将请求正文解析为 json : Unexpected character (\'-\' (code 45)) AWS Lambda + API + Postman

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

我已经尝试了几天从 AWS 中的 API 网关发送到 Lambda 函数的参数,但我没有成功。

我决定从头开始,所以我按照他们的演练(http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda)

我已检查过此演练两次,并且已按照信函中的步骤进行操作。

问题

当我从 Postman 或在 Swift 中测试 API 时,我收到了错误:

{"message": "Could not parse request body into json: Unexpected character (\'-\' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value\n at [Source: [B@c036d15; line: 1, column: 3]"}

在 postman 中,当我以 JSON 格式查看结果时,我得到了

Bad String

Lambda 函数

函数是演练中的基本示例:

console.log('Loading event');

exports.handler = function(event, context) {
  var name = (event.name === undefined ? 'No-Name' : event.name);
  console.log('"Hello":"' + name + '"');
  context.done(null, {"Hello":name}); // SUCCESS with message
};

当从 Lambda 控制台进行测试并使用测试数据时,我得到了结果:

{
    "Hello": "TestUser123"
}

从 API Gateway 测试时,结果也是:

 {
    "Hello": "TestUser123"
}

谁能明白为什么两个测试控制台都允许这项工作,但是当使用 POSTMAN 测试或在 Swift 脚本中使用时,它却不起作用?

编辑 1

在 postman 中,我将内容类型设置为 application/json

脚本返回默认值:

 {
    "Hello": "user"
}

但是,当我在 POSTMAN 中添加参数 nameTestUser123 时,它会返回错误。

更新 1

好的,所以我将映射模板更改为在另一个答案中找到的模板:

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

现在结果是:

{
   "Hello": ""
}

任何想法为什么它没有得到这个名字?

最佳答案

我今天刚被这个卡住了。

您的映射模板是:

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

AWS 使用 AWS Velocity 模板,该模板;即使看起来像 JSON,也是不同的。

如果你使用

{ "name": $input.params('name') } // notice no quotes

对于集成请求步骤中的映射模板,它应该可以按预期工作。

关于json - 无法将请求正文解析为 json : Unexpected character (\'-\' (code 45)) AWS Lambda + API + Postman,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210087/

相关文章:

javascript - 如何删除/替换 Node16 中的 Unicode 字符

java - 如何反序列化来自 RESTful Web 服务的 JSON 响应?

node.js - Mongoose如何实现嵌套查询

javascript - 如何在浏览器中将遗留 JavaScript 与 NodeJS 集成

android - 为经过身份验证的用户获取凭据提供程序

java - 如何从 parseJson 获取 ListView 数据

javascript - 使用 .$each 访问 Json 中的嵌套数组

javascript - axios响应错误: certificate has expired

node.js - 如何将 JPG 上传到 AWS Lambda (NodeJS)

javascript - 使用基于 AWS Cognito 和 IAM 角色的 AWS DynamoDB 直接从客户端(Web 应用程序)访问的安全漏洞是什么