当前位置:首页 > VUE

vue拦截器实现

2026-02-20 16:24:20VUE

Vue 拦截器实现方法

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

Axios 请求/响应拦截器

安装 Axios(如未安装):

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)中添加全局守卫:

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);
    }
  };
}

使用方式:

vue拦截器实现

export default withAuthCheck(YourComponent);

注意事项

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

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

相关文章

vue实现文字播放栏

vue实现文字播放栏

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

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue键盘实现

vue键盘实现

监听键盘事件 在Vue中监听键盘事件可以通过v-on指令或@缩写实现。常见的键盘事件包括keydown、keyup和keypress。例如监听回车键事件: <template> &l…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…