API Gateway调用Node.js Lambda返回502 malformed Lambda proxy response错误
问题原因
- 你返回给API Gateway的响应结构不符合Lambda代理集成的强制格式要求:
API Gateway要求Lambda代理集成的返回值必须包含statusCode(数字类型HTTP状态码)、headers(响应头对象)、body(字符串类型响应内容)三个核心字段。你当前的返回对象里把Content-Type响应头直接放在根层级,且键名写为contentType,没有封装到headers字段中,API Gateway无法识别合法响应结构所以报错。 - Promise的catch块只打印了日志没有返回合法的响应对象:如果逻辑触发reject,catch执行完会返回undefined,最终Lambda返回undefined也会被识别为格式错误。
- 潜在风险:没有判断
event.headers.Cookie是否存在,如果请求不带Cookie头,调用str.replace会抛出异常,也会导致返回格式错误。
修复方案
- 修改所有resolve、reject返回的对象结构,补充正确的headers字段:
// 成功返回示例 resolve({ statusCode: 200, headers: { "Content-Type": "application/json" }, body: JSON.stringify({JoinInfo: { Meeting: meeting, Attendee: attendee }}) }); // 错误返回示例 reject({ statusCode:400, headers: { "Content-Type": "application/json" }, body: JSON.stringify({error: "access denied"}) });
- 修改catch块,返回合法的错误响应:
.catch(function(erro){ console.log(erro.message); return { statusCode: 500, headers: { "Content-Type": "application/json" }, body: JSON.stringify({error: "internal server error"}) }; });
- 补充Cookie头存在性判断:
var str = event.headers.Cookie || '';
内容的提问来源于stack exchange,提问作者Éder Rocha
相关产品推荐
相关产品推荐

