当前位置:首页 > VUE

vue拦截器实现

2026-02-20 16:24:20VUE

Vue 拦截器实现方法

Vue 拦截器通常用于在请求或响应被处理前进行统一操作,例如添加认证头、处理错误等。以下是两种常见拦截器的实现方式:

Axios 请求/响应拦截器

安装 Axios(如未安装):

vue拦截器实现

npm install axios

创建拦截器文件(如 http.js):

import axios from 'axios';

// 创建实例
const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 5000
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    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) {
      alert('登录过期,请重新登录');
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

export default instance;

Vue Router 导航守卫(路由拦截器)

在路由配置文件(如 router/index.js)中添加全局守卫:

vue拦截器实现

import Vue from 'vue';
import Router from 'vue-router';
import store from '../store';

Vue.use(Router);

const router = new Router({
  routes: [...]
});

// 全局前置守卫
router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !store.getters.isLoggedIn) {
    next('/login');
  } else {
    next();
  }
});

// 全局后置钩子
router.afterEach((to, from) => {
  document.title = to.meta.title || '默认标题';
});

export default router;

自定义拦截器(高阶组件)

对于组件级别的拦截,可使用高阶组件模式:

function withAuthCheck(WrappedComponent) {
  return {
    mounted() {
      if (!this.$store.getters.isLoggedIn) {
        this.$router.replace('/login');
      }
    },
    render(h) {
      return h(WrappedComponent);
    }
  };
}

使用方式:

export default withAuthCheck(YourComponent);

注意事项

  • 拦截器中的异步操作需返回 Promise 或使用 async/await
  • 避免在拦截器中执行耗时操作以免阻塞主流程
  • 路由拦截器可通过 to.matched.some(record => record.meta.requiresAuth) 检查嵌套路由
  • 对于 Axios 拦截器,可通过 config.url 实现特定 URL 的过滤处理

标签: 拦截器vue
分享给朋友:

相关文章

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的…

vue实现轮询

vue实现轮询

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

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素…