首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用fetch(),从非HTTP OK状态码读取响应正文并捕获异常

使用fetch()函数可以发送HTTP请求并获取响应。当响应的状态码为非HTTP OK状态码时,可以通过fetch()的异常处理机制来捕获异常。

完善且全面的答案如下:

fetch()是一种现代的Web API,用于发送HTTP请求并获取响应。它是基于Promise的异步操作,可以在前端开发中用于与后端服务器进行数据交互。

当使用fetch()发送请求时,服务器会返回一个响应对象。这个响应对象包含了很多有用的信息,包括响应的状态码。HTTP状态码是服务器返回给客户端的一个三位数的数字,用于表示请求的处理结果。

在fetch()中,当响应的状态码为非HTTP OK状态码(如404 Not Found、500 Internal Server Error等)时,fetch()并不会抛出错误,而是会认为请求成功,并返回一个resolve状态的Promise对象。这意味着我们需要手动检查响应的状态码,并根据需要进行处理。

为了从非HTTP OK状态码读取响应正文并捕获异常,我们可以在fetch()的Promise链中添加一个条件判断,检查响应的状态码。如果状态码不是HTTP OK状态码,我们可以通过抛出一个自定义的异常来捕获错误,并进行相应的处理。

以下是一个示例代码:

代码语言:txt
复制
fetch('https://example.com/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('HTTP error, status = ' + response.status);
    }
    return response.json();
  })
  .then(data => {
    // 处理响应数据
    console.log(data);
  })
  .catch(error => {
    // 捕获异常并进行处理
    console.error('Error:', error);
  });

在上面的代码中,我们首先使用fetch()发送了一个GET请求到https://example.com/api/data。然后,我们在第一个.then()中检查响应的状态码。如果状态码不是HTTP OK状态码,我们抛出一个自定义的异常,将错误信息作为异常的描述。在第二个.then()中,我们可以继续处理响应的正文数据。最后,我们使用.catch()来捕获异常,并进行相应的错误处理。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云API网关:腾讯云API网关是一种全托管的API服务,可帮助开发者更轻松地构建、发布、运行和维护规模化的API。它提供了丰富的功能,包括请求转发、访问控制、流量控制、缓存、监控等。了解更多信息,请访问:腾讯云API网关
  • 腾讯云云函数:腾讯云云函数是一种事件驱动的无服务器计算服务,可帮助开发者在云端运行代码,无需关心服务器的管理和维护。它支持多种编程语言,并提供了丰富的触发器和事件源。了解更多信息,请访问:腾讯云云函数

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • SpringBoot!你的请求、响应、异常规范了吗?

    这段时间在调整老系统相关的一些业务代码;发现一些模块,在无形中就被弄的有点乱了,由于每个开发人员技术水平不同、编码习惯差异;从而导致在请求、响应、异常这一块儿,出现了一些比较别扭的代码;但是归根究底,主要问题还是出在规范上面;不管是大到项目还是小到功能模块,对于请求、响应、异常这一块儿,应该是一块儿公共的模板化的代码,一旦定义清楚之后,是不需要做任何改动,而且业务开发过程中,也几乎是不需要动到他丝毫;所以,一个好的规范下,是不应该在这部分代码上出现混乱或者别扭的情况的;忍不住又得来整理一下这一块儿的东西;

    04

    servlet--response、request

    /* String s = "Hello outputStream"; byte[] bytes = s.getBytes(); response.getOutputStream().write(bytes); */ /** * 演示响应字节数据 */ // 把一张图片读取到字节数组中 String path = "F:/F/白冰.jpg"; FileInputStream in = new FileInputStream(path); // byte[] bytes = IOUtils.toByteArray(in);//读取输入流内容的字节到字节数组中。 // response.getOutputStream().write(bytes); IOUtils.copy(in, response.getOutputStream()); 3 设置响应头信息   可以使用response对象的setHeader()方法来设置响应头!使用该方法设置的响应头最终会发送给客户端浏览器! l response.setHeader(“content-type”, “text/html;charset=utf-8”):设置content-type响应头,该头的作用是告诉浏览器响应内容为html类型,编码为utf-8。而且同时会设置response的字符流编码为utf-8,即response.setCharaceterEncoding(“utf-8”); l response.setHeader("Refresh","5; URL=http://www.itcast.cn"):5秒后自动跳转到传智主页。 /* * 下面是用来发送响应体! */ PrintWriter writer = response.getWriter(); writer.print("欢迎XXX登录!5秒钟后会自动跳转到主页!您看到的一定是乱码!"); /* * 设置名为Refresh的响应头 */ response.setHeader("Refresh", "5;URL=/day10_1/EServlet"); 4 设置状态码及其他方法 l response.setContentType("text/html;charset=utf-8"):等同与调用response.setHeader(“content-type”, “text/html;charset=utf-8”); l response.setCharacterEncoding(“utf-8”):设置字符响应流的字符编码为utf-8; l response.setStatus(200):设置状态码; l response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。 5 重定向 5.1 什么是重定向 当你访问http://www.sun.com时,你会发现浏览器地址栏中的URL会变成http://www.oracle.com/us/sun/index.htm,这就是重定向了。 重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。

    01
    领券