【问题标题】:Fetch returning 404 error: "GET <urlthatIwasfetchinghere> 404 (Not Found)"获取返回 404 错误:“GET <urlthatIwasfetchinghere> 404(未找到)”
【发布时间】:2021-03-31 21:15:08
【问题描述】:

我正在使用 fetch,据我了解,从不存在的页面获取时应该发生 404 代码,但不会发生 GET 404 错误。我正在使用开放的天气图 api。我得到的错误是GET ${forcastUrl} 404 (Not Found)

我的 fetch 语句如下所示:

function fetchingForcast(forcastUrl){
    fetch(forcastUrl)
    .then(validateWeatherResponse)
    .then(responseToJSON)
    .then(dat => {
      forcastDat = dat;
      updateforcastPanel();
    })
    .catch(error=>{
      console.log(error);
    })
  }
function validateWeatherResponse(response){
  if (response.ok){
    return response;
  } else {
    throw Error("response.ok: "+ response.ok);
  }

validateWeatherResponse 检查响应是否正常,如果不正常,则抛出错误。但是,当它确实抛出错误时,它应该去捕获并 console.log 错误。当我在 chrome 上使用 debug devtool 时,一旦调用 validateWeatherResponse,就会出现错误。

除了这个错误,当我输入正确的网站时,我的代码可以工作。据我了解,不应发生 404 错误,因此我想了解为什么会发生这种情况。 谢谢!

【问题讨论】:

标签: javascript fetch es6-promise


【解决方案1】:

来自MDN's HTTP status code documentation

404 未找到 服务器找不到请求的资源。在浏览器中,这意味着无法识别 URL。在 API 中,这也可能意味着端点有效但资源本身不存在。此响应代码可能是最著名的响应代码,因为它在网络上频繁出现。

404 错误代码表示您请求的网站或端点不存在,如果您请求的页面不存在,这肯定是意料之中的。

如果您仍然对错误感到困惑,请在评论中告诉我。

【讨论】:

  • 感谢您的回答!但是,根据stackoverflow.com/questions/39297345/fetch-resolves-even-if-404,我不应该收到此错误,而应该将其捕获。我也觉得出错是不好的做法,所以我想避免它们。
  • @TheShagod 啊。您链接的那个线程实际上说 404 错误不会传递给 catch:A fetch() call is only rejected if the network request itself fails for some reason (host not found, no connection, server not responding, etc...). 因此,来自服务器的任何响应(包括 404 错误)都被 fetch 视为成功。您可以验证.then 中的状态代码并进行相应操作。显然有错误不是一件好事,所以你应该通过不请求不存在的页面来修复错误!
  • 我正在进行的项目有一个用户搜索城市,我的应用程序返回天气预报。如果用户试图弄乱应用程序并搜索不存在的页面,我不确定如何避免这种情况。我的 fetch 语句确实将错误捕获到“console.log(error)”,但 fetch 还发送了一个错误。我的validateWeatherResponse 会抛出一个错误,如果出现 404 错误(response.ok 将是错误的),那么 fetch 可以捕获该错误。
  • @TheShagod 如果用户有意搜索不存在的页面,除了告诉他们No ResultsLocation Not Found 之外,您无能为力。如果状态码为 404,可能显示alert()
猜你喜欢
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2021-11-21
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多