我遇到了POST请求和JSON数据的问题 . 我的api使用了'Use Lambda Proxy integration',甚至当我测试代理发送一个内容类型的Application / json和一些json在体内,例如 {"foo":"bar"}
我无法访问该对象而不先解析它
例如
var json = JSON.parse(event.body);
console.log(json.foo);
现在我知道这并没有看到其他一些例子,而事实并非如此 . 看到这里https://github.com/pinzler/fb-messenger-bot-aws-lambda/blob/master/index.js
我是否需要向API网关添加任何内容才能正确处理? 'post method request'部分中的'request body'步骤具有针对请求主体的内容类型application / json设置 .
据我所知,上面例子的自述文件似乎没有使用代理集成,所以我不确定我应该在这里做什么
3 回答
您可以在API网关中配置两种不同的Lambda集成,例如Lambda集成和Lambda代理集成 . 对于 Lambda integration ,您可以在不需要解析正文的有效负载中自定义要传递给Lambda的内容,但是当您在API网关中使用 Lambda Proxy integration 时,API网关会将所有内容代理到有效负载中的Lambda,如下所示,
对于您正在引用的示例,它不是从原始请求中获取正文 . 它正在将响应主体构建回API网关 . 它应该是这种格式,
我认为使用API Gateway与Lambda集成时需要了解一些事项 .
Lambda集成与Lambda代理集成
过去只有Lambda Integration需要映射模板 . 我想这就是为什么仍然会看到许多使用它的例子 .
body是转义字符串,而不是JSON
使用Lambda代理集成,lambda事件中的正文是一个使用反斜杠转义的字符串,而不是JSON .
如果在JSON格式化程序中测试 .
以下文件是关于答复,但它应适用于请求 .
要让JavaScript作为JSON对象访问它,需要使用JapaScript中的json.parse,Python中的json.dumps将其转换回JSON对象 .
AWS documentation显示了该怎么做 .
我和Zappa一起使用lambda;我用json格式的POST发送数据:
我的basic_lambda_pure.py代码是:
我得到了下一个json响应:
我的数据是 body 键,但是是64位编码的,我怎么知道这个?我看到了钥匙 isBase64Encoded
我复制了body键的值并用This tool和"eureka"解码,我得到了值 .
我希望这对你有帮助 . :)