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

React Native中AWS Amplify无法获取Lambda自定义错误消息

解决AWS Amplify v6调用API Gateway无法获取自定义错误消息的问题

问题分析

使用AWS Amplify v6的post方法调用API Gateway时,当Lambda返回400等非2xx状态码,catch块中只能拿到UnknownError,无法直接获取Lambda返回的自定义错误消息——尽管Postman能正常接收完整错误响应。这是因为Amplify v6在处理非2xx响应时会抛出封装后的错误,原始响应体需要从错误对象中提取。

解决方案

方案1:在Catch块中提取错误响应体

修改组件中的错误处理逻辑,从error.response中获取原始响应并解析:

async function createOrg() {
  try {
    const response = await apiUtils.createOrganization({
      orgName: orgName,
    });
    setOrganization(response);
  } catch (error) {
    console.log('Error!');
    // 提取并解析错误响应体
    if (error.response) {
      try {
        const errorBody = await error.response.body.json();
        console.log('错误消息:', errorBody.error.response.body);
      } catch (parseError) {
        console.log('解析错误响应失败:', parseError);
      }
    }
    console.log(JSON.stringify(error));
  }
}

方案2:在API工具层统一处理响应状态

修改apiUtils.js,先获取完整响应,判断状态码后自行处理错误,避免Amplify自动抛出错误:

createOrganization: async (body) => {
  const restOperation = post({
    apiName: API_NAME,
    path: "/organizations",
    options: {
      body: body,
    },
  });
  
  const response = await restOperation.response;

  // 检查响应状态是否正常
  if (!response.ok) {
    const errorData = await response.body.json();
    // 抛出包含自定义错误消息的异常
    throw new Error(errorData.error.response.body);
  }

  return await response.body.json();
}

方案3:确保Lambda返回正确的响应头

Lambda返回响应时,必须设置Content-Type: application/json头,否则Amplify可能无法正确解析响应体:

if (!isValidOrgName(orgName)) {
  return new APIGatewayProxyResponseEvent()
          .withStatusCode(HttpStatusCode.BAD_REQUEST)
          .withHeaders(Map.of("Content-Type", "application/json"))
          .withBody(objectMapper.writeValueAsString(ErrorHelper.buildError(HttpStatusCode.BAD_REQUEST,
                  "Org name should not contain special characters.")));
}

原理说明

Amplify v6的REST客户端在收到非2xx状态码时,会将响应封装到UnknownError的response属性中。通过访问该属性并解析响应体,就能获取Lambda返回的自定义错误消息。同时,正确设置响应头是确保响应体能被正常解析的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:26