【CV即用】 使用Axios拦截器实现前端HTTP请求的统一处理

在前后端分离的架构中,前端通常使用像Axios这样的HTTP客户端来与后端API进行通信。结合Spring Boot的统一响应体和全局异常处理,我们可以构建一套健壮的前后端交互模型。下面是一个Axios与Spring Boot配合使用的示例。

【CV即用】 理解和使用Spring Boot中的异常处理和响应体增强

前端Axios请求拦截器示例

Axios 拦截器允许我们在发出请求或者接收响应之前进行操作。这里是一个通用的 Axios 拦截器示例,它可以应用于发送请求之前和接收到响应之后的场景。

import axios from 'axios';

// 创建一个 Axios 实例
const apiClient = axios.create({
  baseURL: 'http://api.yourdomain.com',
  timeout: 1000,
});

// 请求拦截器
apiClient.interceptors.request.use(
  config => {
    // 在这里添加例如token或者其他请求头信息
    const token = localStorage.getItem('userToken');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    // 进行一些操作后,记得返回 config
    return config;
  },
  error => {
    // 处理请求错误
    console.error('Request Error:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
apiClient.interceptors.response.use(
  response => {
    // 先判断响应状态码是否为200
    if (response.status === 200) {
      // 再判断业务状态码是否为后端定义的正常状态,这里假设是200
      if (response.data.code === 200) {
        // 直接返回数据部分
        return response.data.data;
      } else {
        // 如果业务状态码不正常,可以在这里抛出一个错误
        const error = new Error(response.data.message || 'Error');
        return Promise.reject(error);
      }
    } else {
      // 如果HTTP状态码不是200,也抛出错误
      return Promise.reject(new Error('请求响应错误'));
    }
  },
  error => {
    // 对响应错误做点什么
    if (error.response) {
      // 服务器至少返回了一个响应,可以使用 http 状态码判断错误类型
      console.error('Response Error Status:', error.response.status);
      console.error('Response Error Data:', error.response.data);
      // 还可以根据HTTP状态码,抛出不同的错误信息或进行不同的错误处理
    } else if (error.request) {
      // 请求已经发出去,但是没有收到响应,比如超时
      console.error('No response received:', error.request);
    } else {
      // 在设置请求时发生了一些事情,触发了一个错误
      console.error('Error:', error.message);
    }
    
    // 如果有额外的错误信息,也可以包含在内
    console.error('Error Config:', error.config);
    
    return Promise.reject(error);
  }
);

// 使用拦截器的 API Client 发送GET请求示例
apiClient.get('/test/get')
  .then(data => {
    // 由于响应拦截器直接返回`response.data.data`, 因此这里的`data`就是我们想要的数据
    console.log('获取成功:', data);
  })
  .catch(error => {
    // 请求失败或响应数据不符合预期时的错误处理
    console.error('获取失败:', error);
  });

在这个示例中,请求拦截器用于添加如身份验证令牌等共通请求头。响应拦截器用于提前处理状态码以及筛选返回的数据,通过判断状态码和业务代码来区分是否抛出错误。

使用拦截器可以简化请求/响应逻辑,实现前端请求预处理和错误统一处理的逻辑解耦,同时提供了一种简洁的方法来确保所有请求都具有必要的认证信息,而所有的响应都会按照预期进行处理。

综合前后端异常处理流程

用户通过前端界面触发一个请求,前端使用Axios发送API请求到后端。
后端接收到请求,并执行对应的业务逻辑。
如果在业务逻辑中一切正常,后端将正常的数据响应包裹在ApiResponse对象中,并将其作为JSON格式返回给前端。
如果业务逻辑执行中发生错误,如遇到未捕获的异常或明确抛出的CustomException,后端的GlobalExceptionHandler将捕获异常,并将异常信息包裹在ApiResponse对象中返回,同时设置相应的HTTP状态码。
前端的Axios接收到响应后,根据状态码或响应体中的code判断是成功响应还是错误响应,并据此进行下一步的处理。

优化用户体验

为了提高用户体验,前端可以基于后端返回的出错信息来显示友好的错误提示,或者触发相应的错误处理流程,比如跳转到错误页面或弹出提示框等。

总结

通过Axios和Spring Boot结合的方式,前后端可以实现一种稳定可靠的交互模式。后端负责提供标准化的响应和异常信息,前端则根据这些信息来进行适当的展示和异常处理,这种模式有助于提升应用整体的稳定性和用户体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值