【问题标题】:How can I get the complete error from a failed fetch request? [duplicate]如何从失败的获取请求中获取完整的错误? [复制]
【发布时间】:2021-03-29 21:55:57
【问题描述】:

我想从fetch 捕获完整的错误,例如我想要红色标记的东西作为字符串:

但是,在我的 catch 块中,我只收到“无法获取”。这是我的代码:

try {
  response = await fetch(url, {
    method: method,
    body: JSON.stringify(payload),
    headers: {
      Accept: 'application/json',
      'Content-Type': 'application/json'
    }
  });

  if (!response.ok) {
    throw new Error(`RESPONSE NOT OK: ${response.status}`);
  }

  console.info('got 200 json response:' + (await response?.json()));
} catch (e) {
  console.error('CATCH BLOCK:' + e.message); // only gives me "Failed to fetch"
}

那么,我怎样才能得到一个字符串中的完整提取错误,例如直接在我的网络界面中显示?

更新

只是为了澄清这一点:我知道如何修复错误本身。这个问题只是关于如何将完整的错误作为字符串获取。

【问题讨论】:

  • 您使用的是什么后端?您需要在后端启用 CORS。
  • 谢谢,但错误本身不是问题。这真的是关于如何将错误捕获为字符串。
  • 显示的错误信息与fetch API无关。该消息来自浏览器的开发人员工具,您无法通过 JS 与之交互。
  • CORS 错误是浏览器网络错误消息,而不是 fetch() 或 XMLHttpRequest 的一部分。您所能做的就是访问状态
  • 谢谢你们,这是有道理的。无论如何,获取本身不会提供比“获取失败”更多的信息吗?我错过的错误对象的任何属性?喜欢e.fullMessage左右?

标签: javascript typescript fetch-api


【解决方案1】:

实际上有两个请求,而不是一个,因此造成了混乱。 Preflight requests 由您的浏览器自动发出,对您的代码完全透明。他们登录到控制台只是为了帮助开发人员查看问题。除此之外,您的 fetch 请求没有任何关于它们的信息。

您可以在this question 中深入了解它。

虽然它不会为您提供有关初始失败请求的信息,但如果您愿意,您可以选择通过发出 OPTIONS 请求自己触发预检请求:

OPTIONS /resource/foo
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: origin, x-requested-with
Origin: https://foo.bar.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2011-04-08
    • 1970-01-01
    • 2018-04-19
    • 2014-11-15
    • 2020-11-16
    • 2020-03-29
    • 2022-09-24
    相关资源
    最近更新 更多