axios封装实例

研究一段时间总结一下,各位大神指点一下
https.js (axios封装的文件)

import axios from 'axios'
import store from './store.js'
// 创建axios的一个实例
const instance = axios.create({
    baseURL: 'http://api.jkw.ltd/api/v1/',
    headers:{
       //增加headers 的相关信息
        'Content-Type': 'application/x-www-form-urlencoded',
        'Access-Control-Allow-Origin':'*',//跨域
    }
})
// 一、请求拦截器 忽略
instance.interceptors.request.use(function (config) {
    if (store.state.token) {  
    // 判断是否存在token,如果存在的话,则每个http header都加上token
        config.headers.Authorization=`${store.state.token}`;
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});
// 二、响应拦截器 忽略
instance.interceptors.response.use(function (response) {
    return response.data;
}, function (error) {
    // 对响应错误做点什么
    try {
        if (error.response) {
            switch (error.response.status) {
                //放各种错误验证
                case 401:
                    // 返回 401 清除token信息并跳转到登录页面
                    sessionStorage.clear()
                    this.$router.replace({
                        path: 'login',
                        query: {redirect: this.$router.currentRoute.fullPath}
                    })
                   
            }
        }
        return Promise.reject(error.response);
    } catch (e) {
        console.log(e)
    }

});
//axios的方法调用
export default function (method, url, data = null) {
    method = method.toLowerCase();
    if (method === 'post') {
        return instance.post(url, data);
    } else if (method === 'get') {
        return instance.get(url, {params: data});
    } else if (method === 'delete') {
        return instance.delete(url, {params: data});
    } else if (method === 'put') {
        return instance.put(url, data);
    } else {
        console.error('未知的method' + method);
        return false;
    }
}

route.js

import Vue from 'vue';
import Router from 'vue-router';
import store from './store.js';
// 引用组件
import home from "./view/index/home.vue"
const routes= [
		    {
		        name: 'home',
		        path: '/home',
		        component: home,
		        meta: {requireAuth: true}
		    }
    ]
    
// 页面刷新时,重新赋值token
if (sessionStorage.getItem('token')) {
    store.commit('set_token', sessionStorage.getItem('token'))
}
const router = new Router({
    routes  //页面的调用
});
router.beforeEach((to, from, next) => {
    if (to.matched.some((r) => r.meta.requireAuth)) {
        if (store.state.token) {   //判断是否已经登录
            next();
        } else {
            next({
                path: '/login',
                query: {redirect: to.fullPath}   //登录成功后重定向到当前页面
            });
        }
    } else {
        next();
    }
});

export default router;

store.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

export default new Vuex.Store({
    state:{
        token:''
    },
    mutations:{
        set_token(state, token) {
            state.token = token
            sessionStorage.token = token
        },
        del_token(state) {
            state.token = ''
            sessionStorage.removeItem('token')
        }
    }
});

main.js

import Vue from 'vue';
import store from './store.js'
import App from './view/app';
import router from './router.js';

new Vue({
    el: '#app',
    router,
    store,
    components: {App},
    template: '<App/>',
});

home.js()

import req from './http.js'  //对http.js的调用
export const OPEN_COURSE = params => req('get', 'urlXXXX', params);

app.vue

<template>
<div>
	<ul>
		 <li v-for="(item,index) in openClass" :key="index">
	                  <div @click="$router.push({path:'/course/show/'+item.id})">
	                         <div class="card-img">
	                             <img v-lazy="item.image" alt="" width="100%">
	                       </div>
	                        <div class="card-body">
	                              <p class="card-title">{{item.title}}</p>
	                              <p class="free" v-if="item.is_free">免费</p>
	                             <p class="price" v-else>¥{{item.price}}</p>
	                     </div>
	                 </div>
	        </li>	
	   </ul>
</div>
</template>
<script>
	import {OPEN_COURSE} from '../api/home'
	export default{
		name:'home',
		data(){
			return{ openClass: []}
		},
		methods:{
			 async getOpenClass() {
		        let res = await OPEN_COURSE();
		        this.openClass = res.data;
		     },
		}
	}
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值