【问题标题】:Handling fetch errors when response returns appropriate error message React当响应返回适当的错误消息时处理获取错误
【发布时间】:2019-09-19 07:02:18
【问题描述】:

我有以下获取函数

request(url, options) {
  return fetch(url, _.defaultsDeep(options || {}, defaultOptions))
     .then(handleErrors)
     .then(response => response.json())
     .catch(error => handleFetchError(error));
}

handleErrors 函数执行以下操作来检查响应是否失败...

function handleErrors(response) {
   if (!response.ok) {
      throw new Error(response.statusText);
   }
   return response;
}

我遇到的问题是 API 返回一个 400 状态,但也返回一个带有相关错误消息的数组,但使用 throw new Error(response.statusText); 只会返回一些通用错误消息 Error: [object Object] 没有访问错误数组。

这是我期望在响应中返回的内容

{
    "status": 400,
    "error": "Bad Request",
    "errors": [
                   { "defaultMessage": "Please check that your name contains only letters and is longer than two characters" }
              ]
}

我无权访问 API 服务器端,因此我无法在那里更改任何内容。

但是有没有一种方法可以让我抛出错误以捕获但也可以访问响应中的errors 数组?

编辑:

handleErrors 这是我收到的响应对象

{
  "type": "default",
  "status": 401,
  "ok": false,
  "statusText": "",
  "headers": {
    "map": {
      "pragma": "no-cache",
      "date": "Wed, 01 May 2019 07:44:40 GMT",
      "x-content-type-options": "nosniff",
      "x-frame-options": "DENY",
      "content-type": "application/json;charset=ISO-8859-1",
      "cache-control": "no-cache, no-store, max-age=0, must-revalidate",
      "content-length": "53",
      "x-xss-protection": "1; mode=block",
      "expires": "0"
    }
  },
  "url": "http://localhost:8080/login",
  "_bodyInit": {},
  "_bodyBlob": {}
}

当我抛出错误并尝试在handleFetchError 中访问它时,error 参数只是一个空对象{}

【问题讨论】:

  • 'Error: [object object]' 只是使用toString() 时隐藏实际底层对象的控制台输出。你能做一个console.log(JSON.stringify(Error) 看看这个对象是什么样子的吗?并使用该信息更新您的问题?

标签: javascript reactjs error-handling fetch


【解决方案1】:

看起来您正在尝试抛出 response.statusText,但您的响应没有该属性。它有status

【讨论】:

  • 我现在不在我的机器上,但我记得handleError 中的响应与我从 API 获得的响应不同。 handleErrors 中的响应确实包括属性 statusText 和标题等。
  • 如果你能用正确的代码更新你的问题,我可以试着弄清楚。
  • 好吧,代码是正确的,但我可以更新我在handleErrors 中收到的响应参数,但这要到明天。我确定它不包括来自 API 的响应和错误数组,似乎只是来自fetch 的响应以帮助处理错误?
  • 是的,请更新响应输出,并在另一条评论中添加我要求的其他信息。
  • 我已经用响应和控制台日志更新了我的问题
猜你喜欢
  • 2019-04-04
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多