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

NodeJS自定义Lambda函数如何自定义错误HTTP响应状态码?

Lambda抛自定义错误后无法返回500状态码的解决方法

核心问题

你遇到的是API Gateway未将Lambda抛出的错误正确映射到500状态码,默认把错误当成200成功响应处理了——哪怕你配置了Integration Response,大概率是配置细节没到位,或者用了Lambda Proxy集成却没按规则返回响应。

具体解决步骤

情况1:非Lambda Proxy集成(传统模式)

  1. 规范Lambda的错误输出
    不管用callback(err)还是throw new Error(),要让错误信息包含可识别的标识,比如:

    throw new Error("ValidationError: 参数校验不通过");
    // 或者用callback写法
    callback(new Error("ValidationError: 参数校验不通过"));
    
  2. 完善API Gateway的Integration Response配置

    • 打开API Gateway控制台,找到对应API和方法,切换到「Integration Response」标签
    • 点击「Add integration response」,在「Lambda error regex」里填匹配错误标识的正则,比如.*ValidationError.*
    • 把「HTTP status code」设置为500
    • 可选:配置映射模板,把Lambda错误转成前端需要的格式,比如:
      {
        "code": 500,
        "message": "$input.path('$.errorMessage')"
      }
      
    • 关键:修改后必须重新部署API到对应阶段才会生效!

情况2:Lambda Proxy集成(推荐,配置更简单)

如果你的API用了Proxy集成,Lambda不需要抛错,直接返回包含statusCode的响应对象即可,API Gateway会直接用这个状态码作为HTTP响应码:

// 校验不通过时直接返回
return {
  statusCode: 500,
  headers: {
    "Content-Type": "application/json",
    // 有跨域需求的话加上这句
    "Access-Control-Allow-Origin": "*"
  },
  body: JSON.stringify({
    error: "参数校验不通过"
  })
};

这种模式下不用配置Integration Response的错误映射,Lambda完全控制响应内容和状态码。

常见排查点

  • 确认API部署状态:修改配置后必须重新部署才会生效
  • 检查正则准确性:如果Lambda错误信息没匹配到你写的正则,API Gateway还是会用默认200响应
  • 明确集成模式:Proxy和非Proxy的配置逻辑完全不同,别搞混了

内容的提问来源于stack exchange,提问作者SSS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:15:43