android - 如何在 React Native 中显示服务器对 HTTP 错误的响应

标签 android reactjs react-native fetch-api

我正在开发 React Native 应用程序。我们最近对 API 调用进行了更改,它可以用 500 和详细说明问题的错误消息进行响应,以便将其呈现给用户。 API 响应如下所示:

{
    "error": ["Renter contact info for User 1 missing"]
}

在客户端,我们使用标准的 fetch() 方法异步发出请求,并解析 Promise 以提取响应对象。当我在应触发 500 的调用后记录响应时,对象如下所示:

{type: "default", status: 500, ok: false, statusText: undefined, headers: Headers…}

这是我们用于所有 API 调用的内部 request() 方法:

export function request(endpoint:string, parameters:Object, method:string = HTTP.get, timeout:number = 3000):Promise{

  return new Promise(async (resolve, reject) => {
    const payload = {
      method,
      headers: {
        'Accept': CONTENT_TYPE,
        'Content-Type': CONTENT_TYPE,
        'Authorization': `Basic ${base64.encode(Config.API_TOKEN)}`,
        'Auth-Token': await Agents.authToken,
      },
      body: JSON.stringify(parameters),
    }

    fetch(apiUrl(endpoint), payload)
      .then(response => {
        if(!response.ok) {
          // ******************
          // this is where the 500 error state is caught, but my response object doesn't contain the message sent from the server.
          reject(response)
          // ******************
        }

        return response
      })
      .then(resolve)
      .catch(reject)
  })
}

如何确保响应对象包含来自服务器的错误消息,以便我可以将其正确显示给我的用户?

最佳答案

fetch(apiUrl(endpoint), payload)
      .then(response => {
        if(!response.ok) {
          response.json().then(function(data) {
            console.log(data);// your error response
          },function(error) {
            //json error
          });
          reject(response)
          // ******************
        }

        return response
      })

response 是一个 ReadableStream 对象。你需要使用.json() 来解析

关于android - 如何在 React Native 中显示服务器对 HTTP 错误的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510801/

相关文章:

c# - 如何使用要在多个其他 MVC 项目中使用的表单构建项目

ios - 如何以编程方式更改 XCode 项目的设备目标?

react-native - 我们如何将 iOS 和 Android 项目隔离到他们自己的仓库中,但维护一个 React-native 仓库?

android - 主动跟踪任务示例在 Mavic Air 中不起作用

javascript - React,为什么标签不为复选框触发 onChange?

android - 如何使用 RxJava 从 Android Room 数据库选择查询中获取返回值

reactjs - 用样式组件和 typescript 覆盖 Prop

javascript - 如何在 React Native 中创建具有内部 flex 底面的三 Angular 形

android - 当 inputType 属性设置为 'number' 时,如何在 EditText 中使用逗号分隔符?

android - textview中文本的默认颜色是什么?