无法JSON.parse无服务器event.body

时间:2018-07-16 12:20:12

标签: serverless-framework serverless aws-serverless

我一直在使用无服务器框架开发一个简单的功能,该框架在http POST中获取一些数据,进行一些分析并将结果发送回去。我使用无服务器离线在计算机上本地运行它,但是在部署它时,解析event.body时出错。

注销该事件。它是一个类似于以下内容的字符串:

----------------------------267253304929569989286258
Content-Disposition: form-data; name="text"

TEST
----------------------------267253304929569989286258--

所以解析失败很有意义,但是我不知道为什么会发生此错误。 有什么建议么?我尝试了很多不同的方法,但完全陷入困境。

谢谢!

3 个答案:

答案 0 :(得分:0)

您无法JSON.parse该event.body,因为它不是JSON。看起来无论发布什么,数据都使用多部分形式的POST样式请求而不是发送JSON。您如何调用HTTP POST?

答案 1 :(得分:0)

我遇到了同样的问题,经过大量调试后发现了2件重要的事情:

1。当内容类型为 application / x-www-form-urlencoded 时,您可能需要以其他方式解析数据:

const qs = require('querystring');

module.exports.run = async event => {
    try {
        const data = qs.parse(event.body);
        console.info('DATA:', data);
    } catch(e) {
        console.error(e.message);
    }
}

2。当请求的 Content-Type multipart / form-data 时,解析将更加复杂。我建议像multiparty或您选择的任何其他

那样额外解析它

答案 2 :(得分:0)

谢谢@Brian Winant!我将答案作为屏幕截图放在这里,这样更清晰。在邮递员中,执行以下操作:

enter image description here

如果内容类型为?,则AWS Lambda将返回event.body作为编码查询字符串。要使其返回JSON字符串,您可以然后解析,发送JSON数据并将content-type设置为x-www-urlencoded