You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda报错「Invalid request, no body found」排查求助

AWS Lambda报错「Invalid request, no body found」排查求助

你好呀!看到你在搭建Lambda+API Gateway的服务时,反复上传代码包还是碰到「Invalid request, no body found」的报错,我来帮你梳理几个常见的排查方向,应该能帮你定位问题~

先结合你提供的信息:你的代码用到了DynamoDB、bcrypt和JWT依赖,API Gateway配置了OPTIONS和对应方法,Lambda关联了API Gateway触发器。接下来分点排查:

1. 优先检查API Gateway的集成模式

这是最容易踩坑的点:

  • 确认你API Gateway的对应方法(比如POST)是否开启了使用Lambda代理集成。如果没开代理集成,API Gateway不会自动把请求体传递到Lambda的event.body字段里,Lambda自然会报找不到body的错误。
  • 要是用的是非代理集成,那得检查「映射模板」:给application/json类型配置映射模板,内容填{"body": $input.body},确保请求体能正确映射到Lambda的输入参数。

2. 验证Lambda的event处理逻辑

  • 你可以先跳过API Gateway,直接在Lambda控制台构造测试事件来验证。比如创建这样的测试事件:
    {
      "body": "{\"username\":\"testuser\",\"password\":\"testpass\"}"
    }
    
    执行测试后去CloudWatch看日志,确认event.body是否存在。如果测试没问题,那百分百是API Gateway的配置问题;如果测试也报同样的错,那就要检查你代码里对event的处理逻辑(比如是不是提前对未解析的body做了操作)。
  • 另外注意:Lambda代理集成下,event.body是字符串格式,你需要先通过JSON.parse(event.body)解析成JSON对象再使用,要是直接操作未解析的字符串,也可能导致后续逻辑误以为没有有效body。

3. 再核对CORS配置的完整性

虽然你配了OPTIONS方法,但要确保OPTIONS的响应头没遗漏:

  • 必须包含Access-Control-Allow-Origin(比如设为*或者你的前端域名)
  • Access-Control-Allow-Methods要包含你实际用到的方法(比如POST)
  • Access-Control-Allow-Headers要包含Content-Type,不然前端可能因为预检请求失败,根本没发出去带body的POST请求,Lambda自然拿不到内容。

4. 最后检查依赖包是否完整

你用到了bcryptjs、jsonwebtoken这些第三方依赖,上传的zip包一定要包含node_modules目录哦!虽然这个问题通常会导致「找不到模块」的报错,但偶尔也会因为依赖缺失导致代码提前终止,间接引发body相关的误判,所以可以去CloudWatch日志里搜下有没有隐藏的依赖报错。

先按这个顺序排查,应该能很快找到问题所在~

备注:内容来源于stack exchange,提问作者Onur Serbes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:53:05