vue中配置路由拦截器

本文详细介绍了如何在Vue项目中配置axios和vue-router的路由拦截器,包括请求和响应拦截,以及在beforeEach钩子中实现的权限验证机制。
摘要由CSDN通过智能技术生成
/**
 *  vue路由拦截器
 *  在Vue项目中配置路由拦截器,通常涉及到使用vue-router和axios两个插件,以下是一个基本的配置流程:
 *  1.在main.js中引入axios和vue-router
 *  2.在scr目录下新建一个router文件夹,在router文件夹中新建request.js文件
 */

// 引入axios,创建axios实例,并设置基础配置
import axios from 'axios'

const service = axios.create({
    baseURL: process.env.VUE_APP_API, // 根据环境变量设置 API 地址
    timeout: 5000, // 请求超时时间
    headers: {
        'Cache-Control': 'no-cache',
        'Content-Type': 'application/json; charset=utf-8',
    }
})

// 请求拦截器,在发送请求之前,可以对请求数据进行处理或添加额外的信息,如 token
service.interceptors.request.use(config => {
    // 在这里添加 token 或其他认证信息
    config.headers['Authorization'] = localStorage.getItem('token') || '';
    return config
}, error => {
    // 处理错误请求
    console.log('err' + error)
    Promise.reject(error)
})

// 响应拦截器,在接收到响应后,可以对响应数据进行处理,或者根据状态码进行特定操作。
service.interceptors.response.use(response => {
    // 处理响应数据
    const res = response.data;
    if (res.code === 200) {
        return res.data;
    } else {
        // 统一处理错误信息
        return Promise.reject(new Error(res.message || 'Error'));
    }
}, error => {
    // 处理错误响应
    return Promise.reject(error)
})

// 路由拦截器,在 vue-router 中,可以使用 beforeEach 钩子函数来拦截路由,进行权限验证或其他逻辑处理。
import router from './router';

router.beforeEach((to, from, next) => {
    // 检查路由是否需要认证
    if (to.matched.some(record => record.meta.requiresAuth)) {
    // 这里添加认证逻辑,例如检查 token
        if (!localStorage.getItem('token')) {
    // 如果认证失败,重定向到登录页面
            next({path: '/login'});
        } else {
            next();
        }
    } else {
        next(); // 确保一定要调用 next()
    }
});

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue,在响应拦截器跳转路由可以通过使用Vue Router实现。要在响应拦截器跳转路由,首先需要在项目引入Vue Router,并在main.js或者需要使用路由的文件进行配置。 首先,需要在项目安装Vue Router,可以使用npm或者yarn进行安装。然后,在main.js文件引入Vue Router并配置: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import App from './App.vue' Vue.use(VueRouter) const router = new VueRouter({ routes: [ // 定义路由信息 { path: '/home', component: Home }, { path: '/about', component: About }, // ... ] }) new Vue({ router, render: h => h(App) }).$mount('#app') ``` 然后,在需要使用响应拦截器的地方进行配置: ```javascript import axios from 'axios' import router from './router' axios.interceptors.response.use(response => { // 在响应拦截器对返回的响应进行逻辑处理 if (response.status === 200) { // 根据逻辑判断,如果需要跳转路由,可以使用router.push方法实现跳转 router.push('/home') // 这里是示例,跳转到名为home的路由 } return response }, error => { return Promise.reject(error) }) ``` 在上述代码,我们使用router.push方法在响应拦截器跳转到指定的路由。通过在Vue Router定义路由规则,我们指定了需要跳转的目标路由。当满足某个条件时,我们调用router.push方法进行路由跳转。 需要注意的是,我们需要确保在使用router实例之前Vue Router已经完成了初始化和配置。在main.js文件,我们在创建Vue实例之前初始化并传入了router实例。 这样,在响应拦截器调用router.push方法就可以实现路由的跳转了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值