【问题标题】:In lambda, Could not parse request body into json在 lambda 中,无法将请求正文解析为 json
【发布时间】:2018-12-01 17:11:06
【问题描述】:

我尝试用 lambda 做后端。

所以我制作了它的样本并通过邮递员发布数据。

我选择form-data并将数据放入key和value中。

然后它就这样返回了。

{"message": "Could not parse request body into json: Unrecognized token \'Idx\': was expecting \'null\', \'true\', \'false\' or NaN\n at [Source: [B@745d4999; line: 1, column: 5]"}

所以我找到了一些文档,如果我使用邮递员来测试 lambda,选择行并像这样发布数据

{
   "key" : "params"
}

但是当我按表单数据类型发布数据时,我想在 lambda 中接收数据。


这是一个简单的测试 在 lambda 中,

exports.handler = (event, context, callback) => {
    // TODO implement

    const Idx = event.Idx * 2;


    callback(null, Idx);

};

并且,当我发布数据 json 类型时 当我发布数据表单数据类型时

【问题讨论】:

  • 请包括错误所指区域的来源。
  • @Dragonthoughts 我编辑了我的答案。

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


【解决方案1】:

当使用表单数据时,你的 event.body 不是 JSON,它是你需要解析的字符串。具体来说,它是一个查询字符串。所以在你的情况下,它是:Idx=2 您需要做的是将其解析为 JSON,然后对其进行操作。 您可以为此使用模块

const querystring = require('querystring');

在 lambda 内部

const body = querystring.parse(event.body)

现在您可以使用body[‘Idx’] 访问Idx

您可以使用typeof 来区分它是对象还是字符串,如下所示:

if (typeof(event.body) === ‘object’)

编辑:完整代码

const querystring = require('querystring');
exports.handler = (event, context, callback) => {
    // TODO implement
    console.log(event.body);
    var Idx = null;
    if (typeof(event.body) === ‘object’) {
        Idx = event.Idx * 2; 
    } else if (typeof(event.body) === ‘string’) {
        Idx = querystring.parse(event.body)[‘Idx’];
    }
    callback(null, Idx);
};

【讨论】:

  • 很抱歉您的回答迟到了。我试试这个,但同样的消息:无法将请求正文解析为 json @Khanal
  • 你能试试最新的编辑吗?这应该是您发布的内容的完整代码替换。那么如果你仍然遇到错误,你能发布 event.body 的值是什么吗?现在正在记录中。
  • 是的,我尝试了最新的编辑。同样的问题,无法解析@Khanal
  • 你检查控制台日志了吗,日志中的event.body等于什么?
  • 我找到了出现此消息的原因。当我通过邮递员发布数据时,我使用 api 网关。所以我改变了身体映射模板,它需要数据。谢谢您的回答。祝你有美好的一天@Khanal
猜你喜欢
  • 2021-01-16
  • 2016-02-07
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2017-01-10
  • 2021-07-09
  • 2014-06-10
  • 2019-10-03
相关资源
最近更新 更多