我有一个Reaction原生应用程序,它使用AWS Amplify库("aws-amplify": "^6.0.13")来管理用户身份验证和令牌,并调用与Lambda集成的API Gateway.当我调用API Gateway中的任何端点时,它返回成功响应,我有一个包含数据、状态代码等的正确响应对象.然而,如果API返回错误,我在catch(error)中看不到错误消息.例如,在对Lambda中的myapi/organizations端点的POST调用中出现无效数据的情况下,我抛出以下代码

if (!isValidOrgName(orgName)) {
                return new APIGatewayProxyResponseEvent()
                        .withStatusCode(HttpStatusCode.BAD_REQUEST)
                        .withBody(objectMapper.writeValueAsString(ErrorHelper.buildError(HttpStatusCode.BAD_REQUEST,
                                "Org name should not contain special characters.")));

如果我通过postman 发送请求,我会得到预期的回复

Bad Request 400
{
    "error": {
        "response": {
            "statusCode": 400,
            "body": "Org name should not contain special characters."
        }
    }
}

但是,如果我使用"AWS-Amplify/API"中的post方法调用此终结点时,使用来自REACT-Native的无效数据,我不会检索到错误响应:

在apiUtils.js中:

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

    return await response.body.json();
  }

在使用apiUtils.js的组件中:

async function createOrg() {
      try {
        const response = await apiUtils.createOrganization({
          orgName: orgName,
        });
        setOrganization(response);
      } catch (error) {
        console.log('Error!');
        
        console.log(JSON.stringify(error));
      }
    }

console.log(JSON.stringify(error));张照片

{"name":"UnknownError","underlyingError":{"name":"UnknownError","$metadata":{"httpStatusCode":400,"requestId":"57d5fb7c-5369-4ca7-9874-03b656a9926d","cfId":"xiwoKGxE_Zhbf3OS58Vm4UiY3O8Un87xyTdLQIHYBb1EjZqkdv4AJQ=="}},"$metadata":{"httpStatusCode":400,"requestId":"57d5fb7c-5369-4ca7-9874-03b656a9926d","cfId":"xiwoKGxE_Zhbf3OS58Vm4UiY3O8Un87xyTdLQIHYBb1EjZqkdv4AJQ=="}}

我看到它返回http 400,但我不知道我需要做什么才能从我的lambda中检索错误消息.

推荐答案

下面是我如何解决它在我的Lambda与帮助chrisbonifacio,谁提供了一个答案在这里https://github.com/aws-amplify/amplify-js/issues/12997

在处理程序类中:

    @Override
    public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {
        try {
            if (!event.getHttpMethod().equals(SdkHttpMethod.POST.name())) {
                return new APIGatewayProxyResponseEvent()
                        .withStatusCode(HttpStatusCode.METHOD_NOT_ALLOWED)
                        .withBody(objectMapper.writeValueAsString(ApiError.builder().message("Only POST method is supported").build()));
            }
// other code here...
}

ApiError类:

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class ApiError {
    private String message;
}

在react native 中:

async function createOrg() {
      try {
        setIsFetching(true);
        const response = await apiUtils.createOrganization({
          orgName: orgName,
        });
        setUserInfo(response);
      } catch (error) {
        setError(error);
      } finally {
        setIsFetching(false);
      }
    }

现在我可以通过error.message获取错误信息

React-native相关问答推荐

复活的夹子在Panguesture上崩溃

如何在Reaction Native DrawerNavigation中添加注销功能

react 在顶部选项卡导航中传递本机数据

领带麦克风在Reaction-Native-Incall-Manager中不工作

嵌套的FlatList内的Incorrect Padding

我们应该在 react-native 移动应用程序中使用哪个图标库

如何在 React / React Native 中使用 Emscripten 编译的 JavaScript

React Native Navigation const { navigate } = this.props.navigation;

_react2.default.PropTypes.function 未定义

在 TouchableOpacity 上创建 Raised凸起或Shadow阴影效果

withNavigation 只能用于导航器的视图层次 struct

React-Native 按钮居中对齐

@react-navigation/stack 与 @react-navigation/native-stack 有什么区别?

Xcode 12 问题:Build input file cannot be found

react-native run-android 在设备上构建旧版本的代码

当前文件夹中的 react-native init

仅链接字体的方法

当前未启用语法nullishCoalescingOperator

NavigationActions.reset 不是函数吗?

将 colored颜色 变量导入我的样式