当前位置:首页 > VUE

vue实现http拦截

2026-03-28 09:18:09VUE

Vue 中实现 HTTP 拦截

在 Vue 中,通常使用 axios 作为 HTTP 客户端,并通过其拦截器功能实现请求和响应的拦截。以下是实现 HTTP 拦截的具体方法:

安装 axios

确保项目中已安装 axios,可以通过以下命令安装:

vue实现http拦截

npm install axios

创建 axios 实例并配置拦截器

src 目录下创建 utils/request.js 文件,用于封装 axios 实例和拦截器逻辑:

import axios from 'axios';

// 创建 axios 实例
const service = axios.create({
  baseURL: 'https://api.example.com', // API 基础地址
  timeout: 5000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 在发送请求前可以修改请求配置
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    // 处理请求错误
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // 对响应数据做处理
    const res = response.data;
    if (res.code !== 200) {
      // 处理业务逻辑错误
      return Promise.reject(new Error(res.message || 'Error'));
    }
    return res;
  },
  (error) => {
    // 处理 HTTP 错误(如 401、404 等)
    if (error.response.status === 401) {
      // 跳转到登录页
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

export default service;

在 Vue 组件中使用封装的请求

在组件中导入封装的 axios 实例并发送请求:

vue实现http拦截

import request from '@/utils/request';

export default {
  methods: {
    fetchData() {
      request.get('/user/info')
        .then((response) => {
          console.log(response);
        })
        .catch((error) => {
          console.error(error);
        });
    },
  },
};

全局错误处理

如果需要全局捕获未处理的请求错误,可以在 main.js 中注册全局错误处理逻辑:

import request from '@/utils/request';

request.interceptors.response.use(
  (response) => response,
  (error) => {
    // 全局错误处理
    console.error('HTTP Error:', error.message);
    return Promise.reject(error);
  }
);

请求取消

通过 axiosCancelToken 可以取消请求,适用于页面切换时取消未完成的请求:

import axios from 'axios';

const CancelToken = axios.CancelToken;
let cancel;

request.get('/user/info', {
  cancelToken: new CancelToken((c) => {
    cancel = c;
  }),
});

// 取消请求
cancel();

通过以上方法,可以在 Vue 项目中高效地实现 HTTP 请求和响应的拦截,并统一处理错误、权限和业务逻辑。

标签: vuehttp
分享给朋友:

相关文章

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vue.…

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…