"use strict";
import QS from "qs";
import Axios from "axios";
import store from "@/store/index";
import { MessageBox } from "element-ui";
// http request 拦截器
Axios.interceptors.request.use(
  config => {
    // console.log('当前环境变量',process.env.VUE_APP_ENV)
    // console.log('当前环境地址',process.env.VUE_APP_URL)
    config.baseURL = process.env.VUE_APP_URL;
    if (!config["params"]) {
      config["params"] = {};
    }
    config.params["token"] = store.state.user.token;
    config.headers["AUTHORIZATION"] = store.state.user.token;
    return config;
  },
  err => {
    return Promise.reject(err);
  }
);
// 添加响应拦截器
Axios.interceptors.response.use(
  res => {
    // 对响应数据做点什么
    console.log('响应',res)
    switch (res.data.code) {
      case 200:
        return res.data;
      case 402:
        MessageBox.confirm(
          `${res.data.msg},可以取消继续留在该页面,或者重新登录`,
          "确定登出",
          {
            confirmButtonText: "重新登录",
            cancelButtonText: "取消",
            type: "warning"
          }
        ).then(() => {
          location.reload(); // 为了重新实例化vue-router对象 避免bug
        });
        break;
      case undefined:
        return res;
      default:
        return res.data;
    }
  },
  error => {
    console.log('aaaa')
    // 如果需要通过服务端返回的数据在组件内进行判定,
    // 由于拦截器是reject的错误,并不能在组件中读取err信息,可以改reject为 resolve 并且返回err.response
    // 对响应错误做点什么
    let code = error.response.status; // 获取错误状态码
    let msg = error.response.data.msg; // 获取提示信息
    switch (code) {
      case 401:
        MessageBox.confirm(
          `${msg},可以取消继续留在该页面,或者重新登录`,
          "确定登出",
          {
            confirmButtonText: "重新登录",
            cancelButtonText: "取消",
            type: "warning"
          }
        ).then(() => {
          location.reload(); // 为了重新实例化vue-router对象 避免bug
        });
        break;
      case undefined:
        return Promise.reject(error);
      default:
        return Promise.reject(error);
    }
  }
);
export default {
  get: option => {
    var options = {
      url: option.url,
      timeout: 10000,
      method: option.method || "get",
      params: option.data || {},
      success: option.succ || function() {},
      error: option.error || function() {}
    };
    return Axios.request(options);
  },
  post: option => {
    var options = {
      url: option.url,
      timeout: 1000000,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
      },
      method: option.method || "post",
      data: option.data,
      success: option.succ || function() {},
      error: option.error || function() {}
    };
    if (option.data && option.typea == 1) {
      options.headers["content-Type"] = "application/json;charset=utf-8";
      options.beforeSend = function(xhr) {
        xhr.setRequestHeader("Test", "testheadervalue");
      };
    } else if (option.data && option.typeb == "excel") {
      options.responseType = "blob";
      options.data = QS.stringify(options.data);
    } else if (option.data && option.typea == 2) {
      options.headers["content-Type"] = "multipart/form-data";
    } else {
      options.data = QS.stringify(options.data);
    }
    return Axios.request(options);
  },
  delete: option => {
    var options = {
      url: option.url,
      timeout: 10000,
      method: option.method || "delete",
      params: option.data || {},
      success: option.succ || function() {},
      error: option.error || function() {}
    };
    return Axios.request(options);
  },
  put: option => {
    var options = {
      url: option.url,
      timeout: 10000,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
      },
      method: option.method || "PUT",
      params: option.data || {},
      success: option.succ || function() {},
      error: option.error || function() {}
    };
    if (option.data && option.typea == 1) {
      options.headers["content-Type"] = "application/json;charset=utf-8";
      options.data = QS.stringify(options.data);
    }
    return Axios.request(options);
  }
};

vue-axios拦截器的更多相关文章

  1. vue axios拦截器 + 自编写插件 实现全局 loading 效果;

    项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...

  2. vue --- axios拦截器+form格式请求体

    在vue2.x中使用CLI生成的模板有很大改变,需要自己手动在main.ts同级目录下新建interceptors.ts interceptors.ts import axios from 'axio ...

  3. vue axios 拦截器

    前言 项目中需要验证登录用户身份是否过期,是否有权限进行操作,所以需要根据后台返回不同的状态码进行判断. 第一次使用拦截器,文章中如有不对的地方还请各位大佬帮忙指正谢谢. 正文 axios的拦截器分为 ...

  4. vue axios拦截器的封装

    // request.js import axios from 'axios' import qs from 'qs' // 创建axios实例 const service = axios.creat ...

  5. vue axios拦截器介绍

    关于axios的拦截器是一个作用非常大,非常好用的东西.分为请求拦截器和响应拦截器两种.我一般把拦截器写在main.js里. 1. 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作,例如在每个请 ...

  6. vue axios拦截器加全局loading

    import axios from 'axios' import util from './util' import {showFullScreenLoading, tryHideFullScreen ...

  7. Vue基于vuex、axios拦截器实现loading效果及axios的安装配置

    准备 利用vue-cli脚手架创建项目 进入项目安装vuex.axios(npm install vuex,npm install axios) axios配置 项目中安装axios模块(npm in ...

  8. vue导航守卫和axios拦截器的区别

    在Vue项目中,有两种用户登录状态判断并处理的情况,分别为:导航守卫和axios拦截器. 一.什么是导航守卫? vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.(在路由跳转时 ...

  9. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装

    1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限.服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文. 2. ...

  10. axios拦截器搭配token使用

    在了解到cookie.session.token的作用后学习token的使用 cookie是随着url将参数发送到后台,安全性最低,并且大小受限,不超过4kb左右,它的数据保存在客户端 session ...

随机推荐

  1. 2020重新出发,JAVA语言,JAVA的诞生和发展史

    java的诞生 在1991年时候,James Gosling在Sun公司的工程师小组想要设计这样一种主要用于像电视盒这样的消费类电子产品的小型计算机语言. 这些电子产品有一个共同的特点:计算处理能力和 ...

  2. Java—Map接口中的常用方法

    Map接口与Collection接口的区别 Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储. Map中的集合,元素是成对存在的(理解为夫妻).每 ...

  3. Java程序员面试必备:Volatile全方位解析

    前言 volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~ 1.volatile的 ...

  4. Jsp内置对象application之统计浏览网页的次数

    <% Object obj = application.getAttribute("count"); if(obj !=null){ Integer sum = (Integ ...

  5. 最新通达OA-getshell 漏洞复现

    0x00 通达简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...

  6. 记录一下前端性能优化-为何操作DOM会变慢?

    对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩(css.js.图片皆可压缩) 样式表放头部,脚本放底部 使用CDN(这部分, ...

  7. Robot Framework(7)——接口测试

    一.准备工作 1.安装requests工具(2.22.0) 下载地址:https://pypi.org/project/requests/ 安装方式: 1>下载压缩文件,解压,目录切到解压目录, ...

  8. Exploring Adversarial Attack in Spiking Neural Networks with Spike-Compatible Gradient

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:2001.01587v1 [cs.NE] 1 Jan 2020 Abstract 脉冲神经网络(SNN)被广泛应用于神经形态设 ...

  9. Tmux安装和使用

    1.What's tmux tmux 是一个终端复用器: 可以激活多个终端或窗口, 在每个终端都可以单独访问,每一个终端都可以访问,运行和控制各自的程序.tmux类似于screen,可以关闭窗口将程序 ...

  10. Dubbo详解

    什么是DubboDubbo是一个分布式服务框架,致力于提供高性能和透明化的远程服务调用方案,这容易和负载均衡弄混,负载均衡是对外提供一个公共地址,请求过来时通过轮询.随机等,路由到不同server.目 ...