美文网首页
对axios封装

对axios封装

作者: Augenstern___ | 来源:发表于2018-12-05 11:24 被阅读0次

首先引入

import axios from 'axios'
import qs from 'qs'
import Vue from 'vue'
import router from '@/router/index'
import { Loading } from 'element-ui';
 //配置请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

配置全局地址 也可以写成自己的地址

axios.defaults.baseURL = process.env.BASE_API;   //代表config配置文件的地址  
Vue.prototype.path = process.env.BASE_API;
Vue.prototype.pathImg = process.env.PATH_IMG;

 let loading = null;
 let loadingOpenCount = 0;
 axios.interceptors.request.use(function (config) {
 if (config.showLoading != false && config.method != 'OPTIONS') {
 []
loadingOpenCount++;
 }
 if (config.showLoading != false && loadingOpenCount == 1 && config.method != 'OPTIONS') {
   open();
 }
  if (sessionStorage.getItem('token')) {
  config.headers.common['token'] = sessionStorage.getItem('token');
}
if (config.method === 'post') {
  config.data = qs.stringify(config.data);
}
if (config.method === 'get') {
  config.url = config.url + "?" + qs.stringify(config.data);
}
if (config.method === 'upload') {
 config.method = 'post';
}
  return config
}, function (error) {
  return Promise.reject(error)
});
axios.interceptors.response.use(
  response => {
     if (response.config.showLoading != false && response.config.showLoading != false && response.config.method != 'OPTIONS') {
  loadingOpenCount--;
 if (loadingOpenCount == 0) {
  setTimeout(function () {
      close();
  }, 0.3 * 1000)
 }
 }
    if(response.headers.authorization){
      sessionStorage.setItem('token',response.headers.authorization) ;
    }
      //判断返回的数据里面code资源
  else if (!response || response.data.code == 401) {
    sessionStorage.clear();
    router.push({
      path: '/login', name: 'login'
      , params: { 'error': response.data.tokenMsg }
    });
   close();
}
return response;
},
  error => {
close();
    //请求异常处理
             switch (error.response.status) {
                case 401:
                   sessionStorage.clear();
                    router.push({path:'/Login',name:'Login'
                    ,params: {'error': 'token失效,请重新登陆'}
                   })
                   }
if(error.response == undefined){
  return {data: {success: false, msg: '请求异常'}};
}else{
  return checkStatus(error.response);
}

if (error.response && error.response.data) {
  return Promise.reject(error.response.data)
}
// 返回接口返回的错误信息
});
 function getConfig(config){
    return config;
 }
 function open() {
   loading = Loading.service({
lock: false,
 text: '拼命加载中...',
 spinner: 'el-icon-loading',
 background: 'rgba(0, 0, 0, 0.7)'
 });
   }
 function close() {
   if (loading) {
     loading.close();
   }
 }

  // 检查状态
  function checkStatus(response) {
    let data = {data: {}};
  data.data['success'] = false;
    switch (response.status) {
    case 400:
      data.data['msg'] = '请求错误'
      break

case 401:
  data.data['msg'] = '未授权,请登录'
  break

case 403:
  data.data['msg'] = '拒绝访问'
  break

case 404:
  data.data['msg'] = '请求地址出错'
  break

case 408:
  data.data['msg'] = '请求超时'
  break

case 500:
  data.data['msg'] = '服务器内部错误'
  break

case 501:
  data.data['msg'] = '服务未实现'
  break

case 502:
  data.data['msg'] = '网关错误'
  break

case 503:
  data.data['msg'] = '服务不可用'
  break

case 504:
  data.data['msg'] = '网关超时'
  break

case 505:
  data.data['msg'] = 'HTTP版本不受支持'
  break

default:
  data.data['msg'] = '异常请求';
  }
  return data;
}

相关文章

  • 在VUE中科学使用axios

    在项目中安装axios 封装axios 新建api/index.js文件,对axios进行简单的封装,方便使用。真...

  • 对axios封装

    首先引入 配置全局地址 也可以写成自己的地址

  • axios 配置

    为了方便对 axios 操作,我们通常对 axios 进行二次封装。 1. 配置 axios 基本信息 建立 sr...

  • vue项目中axios的封装

    通过上一篇文章我们了解了axios,这次结合项目中的封装,具体讲解一下。 1 为什么要封装axios 对axios...

  • axios的配置

    一、axios 1、axios是对ajax请求的封装 2、ajax (1):Asynchronous Javasc...

  • Vue3.0 项目中遇到的问题(十二)

    一. axios的基本使用 二. axios的初步封装 (1) 详细流程图: 三. axios 对有的实例...

  • React 引入axios

    1.进入项目,安装axios 2.对axios二次封装 /model/axios.js 3.页面引入axios.j...

  • vue3+elementPlus+vite项目axios二次封装

    /** * axios封装 */ import axios from "axios"; import config...

  • 面试题

    axios和ajax的区别 axios是通过promise实现对ajax技术的一种封装axios可以运行nodej...

  • ts通过class类封装axios

    ts通过class类封装axios 一、axios 安装 二、HttpRequest类封装 三、接口方法封装 四、...

网友评论

      本文标题:对axios封装

      本文链接:https://www.haomeiwen.com/subject/oedicqtx.html