在lambda中,无法将请求正文解析为json

时间:2018-06-22 08:57:06

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

我尝试使用lambda作为后端。

所以我制作了它的样本,然后由邮递员发布数据。

我选择表单数据并将数据放入键和值中。

它会像这样返回。

{"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类型时 enter image description here 当我发布数据表单数据类型时 enter image description here

1 个答案:

答案 0 :(得分:0)

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

const querystring = require('querystring');

在lambda内部

const body = querystring.parse(event.body)

现在您可以使用Idx来访问body[‘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);
};