当前位置:首页 > VUE

vue实现http拦截

2026-01-14 06:28:58VUE

使用 axios 拦截器

在 Vue 项目中,通常使用 axios 作为 HTTP 客户端。可以通过 axios 的拦截器机制实现请求和响应的拦截。

安装 axios:

npm install axios

创建 axios 实例并添加拦截器:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求前做些什么,例如添加 token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response.data;
  },
  error => {
    // 对响应错误做点什么
    if (error.response.status === 401) {
      // 处理未授权情况
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

export default instance;

全局错误处理

可以在拦截器中统一处理错误,避免在每个请求中重复编写错误处理逻辑。

instance.interceptors.response.use(
  response => response,
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 400:
          notify.error('请求参数错误');
          break;
        case 500:
          notify.error('服务器错误');
          break;
        default:
          notify.error('未知错误');
      }
    }
    return Promise.reject(error);
  }
);

请求取消

在某些场景下可能需要取消请求,例如路由切换时取消未完成的请求。

const CancelToken = axios.CancelToken;
let cancel;

instance.interceptors.request.use(config => {
  if (cancel) {
    cancel(); // 取消上一个请求
  }
  config.cancelToken = new CancelToken(c => {
    cancel = c;
  });
  return config;
});

加载状态管理

可以通过拦截器统一管理加载状态,配合 Vuex 或组件状态使用。

let requestCount = 0;

instance.interceptors.request.use(config => {
  requestCount++;
  store.commit('setLoading', true);
  return config;
});

instance.interceptors.response.use(
  response => {
    requestCount--;
    if (requestCount === 0) {
      store.commit('setLoading', false);
    }
    return response;
  },
  error => {
    requestCount--;
    if (requestCount === 0) {
      store.commit('setLoading', false);
    }
    return Promise.reject(error);
  }
);

重试机制

对于某些特定错误可以实现请求重试逻辑。

instance.interceptors.response.use(null, error => {
  const config = error.config;
  if (!config || !config.retry) return Promise.reject(error);

  config.__retryCount = config.__retryCount || 0;
  if (config.__retryCount >= config.retry) {
    return Promise.reject(error);
  }

  config.__retryCount += 1;
  return new Promise(resolve => {
    setTimeout(() => resolve(instance(config)), config.retryDelay || 1000);
  });
});

vue实现http拦截

标签: vuehttp
分享给朋友:

相关文章

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue 提供…

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPa…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…