vue2+axios 请求拦截器及路由拦截器封装(笔记)

  1. axios依赖安装:npm install axios -S
  2. 新建axios文件夹-> baseUrl.js & index.js & router.js
  3. main.js 引入
//axios封装
import './axios'

 

js介绍:

baseUrl.js:

baseUrl.js 简单区分开发环境、测试环境及生产环境 ,之前有篇文章已经介绍  

https://blog.csdn.net/zuorishu/article/details/81484176

let baseUrl = '';

if (location.hostname == '***') { //正式环境
    baseUrl = '***';
} else if (location.hostname == '***') { //测试环境
    baseUrl = '***';
} else { //开发环境
    baseUrl = '/api'
}

export {
    baseUrl
}

 

index.js:

index.js  axios request 拦截器 & axios response 拦截器封装,只做了拦截器的不分封装,请求类型及方法没有处理;

import Vue from 'vue'  
import axios from 'axios'  
//import qs from 'qs'
import store from '../store'
import router from "../router";
import { baseUrl } from './baseUrl'
import { Toast } from 'mint-ui';
import './router'
Vue.prototype.$http = axios
//Vue.prototype.$qs = qs
axios.defaults.baseURL = baseUrl;
//axios.defaults.withCredentials = true; //让ajax携带cookie

//axios request 拦截器
axios.interceptors.request.use(
    config => {
        if (store.state.sessionId != '') { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
            config.headers.sessionId = store.state.sessionId;
        }
        return config;
    },
    err => {
        return Promise.reject(err);
    }
);

//axios response 拦截器
axios.interceptors.response.use(
    response => {
        const data = response.data;
        //返回状态码处理
        switch (data.code) {
            case 0:
                return response
                break;
            case 100003:
                Toast(data.message);
                store.commit('isLogin', false);
                localStorage.removeItem('plangame')
                router.push({ path: '/login' })
                break;
            case 600003:
                Toast('请稍后刷新尝试');
                router.push({ path: '/' })
                break;
            default:
                Toast(data.message);
                return response
        }
    },
    error => {
        //请求报错处理
        switch (error.response.status) {
            case 500:
                Toast('服务端异常');
                break;
            case 400:
                Toast('请重新登陆');
                store.commit('isLogin', false);
                localStorage.removeItem('plangame')
                router.push({ path: '/login' })
                break;
            case 404:
                router.push({ path: '/error/404' })
                break;
            default:
                return Promise.reject(error)
        }
    }
)

 router.js

router.js 路由拦截器

import store from '../store'
import router from "../router";
//路由验证
router.beforeEach((to, from, next) => {
    if (to.matched.some(m => m.meta.auth)) {
        // 对路由进行验证     
        if (store.state.isLogin == true) { // 已经登陆       
            next() // 正常跳转  
        } else {
            next({ path: '/login', query: { redirect: to.fullPath } })
        }
    } else {
        next()
    }

    /*如果已登陆不允许直接跳转到 登录页面*/
    let fullPath = to.fullPath.substring(0, 6);
    if (fullPath == "/login") {
        if (store.state.isLogin == true) {
            next({
                path: from.fullPath
            });
        } else {
            next();
        }
    }
})

 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue 3中使用axios进行拦截器封装方法如下: 首先,安装axios和@vue/composition-api依赖包: ``` npm install axios @vue/composition-api ``` 然后,在你的项目中创建一个axios.js文件,用于封装axios拦截器逻辑: ```javascript import axios from 'axios'; import { ref } from '@vue/composition-api'; const instance = axios.create({ baseURL: 'https://api.example.com' // 设置请求的基础URL }); // 创建一个ref类型的变量,用于存储当前正在进行的请求数量 const loadingCount = ref(0); // 请求拦截器 instance.interceptors.request.use( config => { // 在请求发送之前,对config进行一些处理,比如添加token等 loadingCount.value++; return config; }, error => { return Promise.reject(error); } ); // 响应拦截器 instance.interceptors.response.use( response => { // 在响应数据返回之前,对response进行一些处理,比如统一错误处理等 loadingCount.value--; return response; }, error => { loadingCount.value--; return Promise.reject(error); } ); export default instance; ``` 接下来,在你的组件中使用该封装好的axios实例: ```javascript import axios from '@/axios'; export default { setup() { // 发起一个请求示例 const fetchData = async () => { try { const response = await axios.get('/data'); console.log(response.data); } catch (error) { console.error(error); } }; return { fetchData }; } }; ``` 这样,你就成功在Vue 3中封装axios拦截器。在请求发起前和响应返回后的拦截器中,你可以根据需要做一些通用的处理,比如添加认证信息、统一错误处理等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值