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

如何将AWS Lambda自定义错误信息传递至客户端控制台?

解决方案:Lambda代理集成下自定义错误信息传递到前端

看起来你遇到的问题是前端无法正确提取Lambda返回的自定义错误体,但网络面板里能看到内容,核心原因有两个:一是Lambda响应格式的小疏漏,二是前端错误处理的方式不对。下面分两步解决:

第一步:修正Lambda的响应格式(符合API Gateway代理集成要求)

你的buildResponse函数里,body直接传入了JS对象,但API Gateway Lambda代理集成要求body必须是JSON字符串。虽然浏览器网络面板能看到解析后的内容,但这可能导致前端请求库(比如axios)在解析响应时出现异常,无法正确映射到错误对象中。

修改buildResponse函数,把body转成JSON字符串:

function buildResponse(statusCode, body) {
  return {
    statusCode: statusCode,
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Credentials': true
    },
    body: JSON.stringify(body) // 关键:将对象转为JSON字符串
  };
}

这样Lambda返回的响应就完全符合API Gateway的规范,避免了潜在的解析问题。

第二步:前端正确处理错误响应

不同的HTTP请求库(axios/fetch)对错误的处理逻辑不同,下面分别给出解决方案:

如果使用Axios:

Axios会把所有状态码不在2xx范围内的响应抛进catch,但错误对象里的response.data才是Lambda返回的自定义错误体。你之前看到的"Request failed with status code 500"只是Axios默认生成的错误消息,需要手动提取response.data中的内容:

try {
  const res = await axios.post('/your-api-endpoint', yourData);
  // 处理成功响应
} catch (error) {
  if (error.response) {
    // 服务器返回了错误响应,提取自定义信息
    const { status, error: customError } = error.response.data;
    console.log('自定义错误:', customError); // 这里就能拿到"My error"
    // 将错误信息展示给用户
    alert(`出错了:${customError}`);
  } else {
    // 网络错误或其他请求问题
    console.error('请求异常:', error.message);
  }
}

如果使用Fetch:

Fetch的逻辑有所不同——它只有网络错误(比如断网)才会进入catch,状态码4xx/5xx的响应不会自动抛出错误,需要手动判断并处理:

try {
  const res = await fetch('/your-api-endpoint', {
    method: 'POST',
    body: JSON.stringify(yourData),
    headers: { 'Content-Type': 'application/json' }
  });

  if (!res.ok) {
    // 状态码不在2xx范围,手动解析错误体并抛出
    const errorData = await res.json();
    throw new Error(errorData.error || `请求失败:${res.status}`);
  }

  const result = await res.json();
  // 处理成功响应
} catch (error) {
  // 这里就能捕获到自定义错误信息
  console.error('错误:', error.message);
  alert(`出错了:${error.message}`);
}

额外注意:不要在Lambda里直接throw Error

你之前尝试throw new Error('My error')会导致API Gateway返回502错误,因为Lambda抛出未捕获的异常时,API Gateway会判定为服务端内部错误,无法正确传递自定义信息。正确的做法始终是返回符合格式的响应对象(就像你用failure函数那样)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:57:47