// 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. centos 7网卡配置文件详解(ifcfg-ens33)

    centos 7网卡配置文件详解(ifcfg-ens33) [root@xuegod63 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE ...

  2. 一文带你读懂Arthas实现原理

    一. 前言 Arthas 相信大家已经不陌生了,肯定用过太多次了,平时说到 Arthas 的时候都知道是基于Java Agent的,那么他具体是怎么实现呢,今天就一起来看看. 首先 Arthas 是在 ...

  3. pwn杂项之linux命令执行

    通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替 下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析. 题目地 ...

  4. 记一次 .NET某企业数字化平台 崩溃分析

    一:背景 1. 讲故事 前些天群里有一个朋友说他们软件会偶发崩溃,想分析看看是怎么回事,所幸的是自己会抓dump文件,有了dump就比较好分析了,接下来我们开始吧. 二:WinDbg 分析 1. 程序 ...

  5. claude3国内API接口对接

    众所周知,由于地理位置原因,Claude3不对国内开放,而国内的镜像网站使用又贵的离谱! 因此,团队萌生了一个想法:为什么不创建一个一站式的平台,让用户能够通过单一的接口与多个模型交流呢?这样,用户就 ...

  6. MySQL学习笔记-多表查询(下)

    多表查询(下) 一. 联合查询 联合查询:将多次查询结果合并,形成新的查询结果集 select {字段列表} from {表A} ... union [all] select {字段列表} from ...

  7. ES5的继承语法

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  8. SpringBoot系列(三)元注解

    元注解,注解的注解,SpringBoot有四个元注解,分别是@Target.@Retention.@Documented.@Inherited.下面就是对元注解的详细讲解和源码展示. @Taget 该 ...

  9. Grafana 开源了一款 eBPF 采集器 Beyla

    eBPF 的发展如火如荼,在可观测性领域大放异彩,Grafana 近期也发布了一款 eBPF 采集器,可以采集服务的 RED 指标,本文做一个尝鲜介绍,让读者有个大概了解. eBPF 基础介绍可以参考 ...

  10. 将链表以m长度为一组反转链表

    一群友分享的阿里面试题 1.将head链表以m为组反转链表(不足m则不反转): 例子:假设m=3. 链表 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> ...