// axios二次封装
import axios from 'axios'
import qs from 'qs' /***
*判断环境变量区分接口的默认地址
*/
switch (process.env.NODE_ENV) {
case 'production':
axios.defaults.baseURL = 'http://api.zhouzha.cn'
break
case 'test' :
axios.defaults.baseURL = 'https://192.168.109:2000'
break
default :
axios.defaults.baseURL = 'http://127.0.0.1:3000'
} /**
* 设置超时时间和跨域是否允许携带凭证
*/
axios.defaults.timeout = 10000
// 跨域资源允许携带
axios.defaults.withCredentials = true /**
* 设置请求传递数据的格式(看服务器要求)
* x-www-form-urlencoded 格式 ==> xxx=xxx&xxx=xxx
* 一般是post请求
*/
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
// qs.stringify() 将对象变成 xxx=xxx&xxx=xxx格式 qs.parse() 将xxx=xxx&xxx=xxx转换成对象
axios.defaults.transformRequest = data => qs.stringify(data) /**
* 请求拦截器
* TOKEN校验(JWT)
* 接收服务器返回token,存储到vuex/本地存储中,每一次向服务器发请求,我们应该把token带上
* 当token失效时,把本地服务器清除调,再从服务器取
*/
axios.interceptors.request.use((config) => {
// 携带token
const token = localStorage.getItem('token')
token && (config.headers.Authorization = token)
return config
}, error => {
return Promise.reject(error)
}) /**
* 响应拦截器
* 浏览器默认以2开头为成功,3开头为失败
*/
// 此设置一般不用设置 (设置以2或3开头为响应成功)
// axios.defaults.validateStatus = status => {
// // 自定义响应成功的http状态码
// return /^(2|3)\d{2}$/.test(status)
// } axios.interceptors.response.use(response => {
// 直接返回响应主体内容 (response里边还包含了data ,headers ,config ....)
return response.data
}, error => {
const { response } = error
if (response) {
// 服务器有返回结果
// 对不同状态码进行不同处理
switch (response.status) {
case 401 : // 当前请求需要用户验证,一般是未登录(权限)
// 进行一些操作,提示
break
case 403 : // 服务器已经解决请求,但是拒绝执行它 (一般是token过期,session过期)
localStorage.removeItem('token')
break
case 404 : // 请求失败,请求所希望得到的资源未被在服务器上发现 .找不到页面(地址错误)
break
}
return Promise.reject(error)
} else {
// 服务器没有返回结果 :原因一:服务器崩了 。原因二 :客户端没网
if (!window.navigator.onLine) {
// 断网处理:可以跳转断网页面
return
}
return Promise.reject(error)
}
}) export default axios

Vue Axios二次封装的更多相关文章

  1. 【vue】axios二次封装,更好的管理api接口和使用

    在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...

  2. 原生 Ajax 封装 和 Axios 二次 封装

    AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...

  3. axios 二次封装

    一般项目往往要对 axios 库进行二次封装,添加一些自定义配置和拦截器等 案例 ./service/axios.js 1234567891011121314151617181920212223242 ...

  4. typescript开发vue项目二次封装的axios用return Promise.reject(error) 返回异常,提示[Vue warn]: Error in v-on handler (Promise/async)

    二次封装axios时刻意服务端模拟了延迟返回数据的场景,用return Promise.reject(error) 返回异常,报如下错误, [Vue warn]: Error in v-on hand ...

  5. element el-table表格的vue组件二次封装(附表格高度自适应)

    基于vue的el-table表格二次封装组件方法 前言 在公司实习使用vue+element-ui框架进行前端开发,使用表格el-table较为多,有些业务逻辑比较相似,有些地方使用的重复性高,如果多 ...

  6. axios二次封装的几种方法

    一.用Class方法 import axios from "axios"; declare var Promise: any; export class Request { sta ...

  7. axios二次封装

    import axios from "axios" //请求拦截器 axios.interceptors.request.use(function (config) { retur ...

  8. vue+axios请求头封装

    import { mapMutations } from 'vuex' import axios from 'axios' import { Toast } from 'mint-ui'; impor ...

  9. 【uni-app】uni.request二次封装,更好的管理api接口和使用

    前言 之前写了一个Vue.js的axios二次封装(点击跳转),这次是uni-app,uni-app是基于vue.js框架的,我觉得是很好用的一个框架,而且一套代码编译那么多平台,非常节省成本,当然, ...

  10. vue项目中对axios的二次封装

    近来在使用vue重构公司m站时,使用了axios来进行数据的请求,由于项目的需要,对axios进行了二次封装,点击进入axios //引入axios import axios from 'axios' ...

随机推荐

  1. npm install current-device js 端判断程序运行的设备

    https://github.com/matthewhudson/current-device CURRENT-DEVICE        This module makes it easy to w ...

  2. 转 [golang]为什么Response.Body需要被关闭

    Body io.ReadCloser       The http Client and Transport guarantee that Body is always non-nil, even o ...

  3. 将编译过的C++库迅速部署在Visual Studio新项目中

      本文介绍在Visual Studio中,通过属性表,使得一个新建解决方案中的项目可以快速配置已有解决方案的项目中各类已编译好的C++第三方库的方法.   例如,我们现有一个解决方案,其中的一个项目 ...

  4. fabric compose文件解读(Orderer篇)

    orderer在fabric中的作用是排序,另外orderer有点像是管理节点一样,通道之类的都是在orderer的基础之上建立的,有点像比特币,以太坊上面的全节点一样,不过责任比全节点少很多,甚至都 ...

  5. ajax 请求接口实例

    通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象.大多数 ...

  6. ARM汇编基础

    1 GNU语法 1.1 GNU汇编 GNU 汇编语法适用于所有的架构,并不是 ARM 独享的,GNU 汇编由一系列的语句组成,每行一条语句,每条语句有三个可选部分,如下: label: instruc ...

  7. webpack externals忽略不打入的包

    例如项目中使用从 CDN 引入 jQuery,而不是把它打包进来使用 import $ from 'jquery' webpack.config.js externals: { jquery: 'jQ ...

  8. 硬件开发笔记(十七):RK3568底板电路串口、485、usb原理图详解

    前言   原理图有一些常用电路.  本篇就将集中常用电路分析完,如uart口,涉及usart串口.rs485.usb口.   串口   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接 ...

  9. 说一下 session 的工作原理?

    session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中.这样客户端每次访问 ...

  10. mybatis Selective动态判断属性值新增或修改操作,batch批量操作

    mybatis Selective动态判断属性值新增或修改操作,batch批量操作 mybatis insert foreach批量添加https://www.cnblogs.com/oktokeep ...