接触vue已经很长时间,也经常使用axios,但是原生封装的方法都很难满足日程开发的需求,所以这期就写一下axios的封装。

作者:陈宝玉啊

转发链接:https://www.jianshu.com/p/a5c8ce9542e6

底部有完整代码

1.前期准备

创建一个js文件,命名自定。我这里定义为request.js

import axios from 'axios'  //导入原生的axios import qs from 'qs';       //导入qs,做字符串的序列化,为了后面不同的场景使用。import {  MessageBox,  Message} from 'element-ui'            //引入element-ui的两个组件,分别是消息框和消息提示         import store from '@/store'    //引入状态管理仓库import router from '@/router'  //引入路由import {  getToken} from '@/utils/auth'          //根据业务需求,这个方法是用来获取Token

2.创建实例

// 创建一个axios实例const service = axios.create({  baseURL: 'XXXXXX',         // url = base url + request url  withCredentials: true,    // 当跨域请求时发送cookie  timeout: 15000           // 请求时间})

3.请求拦截器

在发送请求之前做些什么

service.interceptors.request.use(  config => {    if (store.getters.token) {    // 让每个请求携带令牌——['Has-Token']作为自定义密钥。    // 请根据实际情况修改。    config.headers['Has-Token'] = getToken()    }    //在这里根据自己相关的需求做不同请求头的切换,我司是需要使用这两种请求头。    if (config.json) {      config.headers['Content-Type'] = 'application/json'    } else {      config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'      config.data = qs.stringify(config.data);   //利用qs做json序列化    }    return config  },  error => {    // 处理请求错误    console.log(error) // 调试    return Promise.reject(error)  })

4.响应拦截器

在收到相应后做些什么

service.interceptors.response.use(  response => {    const res = response.data    //这是响应返回后的结果    //在这里可以根据返回的状态码对存在响应错误的请求做拦截,提前做处理。    //以下为我司的处理规则    // 如果自定义代码不是200,则判断为错误。    if (res.code == 200 || res.code == 300) {      // 重新登陆      MessageBox.confirm('您的登录状态存在问题,您可以取消以停留在此页面,或再次登录', '系统提示', {        confirmButtonText: '重新登录',        type: 'warning'      }).then(() => {        store.dispatch('user/resetToken').then(() => {          location.reload();        })      })      return    } else {      if (res.code == 700) {        Message.warning('您没有获取请求的权限!')        router.replace({          path: '/401'        })        return      } else {        return res      }    }    //end  },  error => {    console.log('err' + error)    Message({      message: error.message,      type: 'error',      duration: 5 * 1000    })    return Promise.reject(error)  })

5.抛出实例

export default service

6.如何调用

//以我司请求为例子import request from '@/utils/request'export function getCity(data) {  return request({    url: '/getCity/findParentId',    method: 'post',    data  })}

7.完整代码

import axios from 'axios'import qs from 'qs';import {  MessageBox,  Message} from 'element-ui'import store from '@/store'import router from '@/router'import {  getToken} from '@/utils/auth'// 创建一个axios实例const service = axios.create({  baseURL: 'XXXXX',   withCredentials: true,   timeout: 15000 })service.interceptors.request.use(  config => {    if (store.getters.token) {    // 让每个请求携带令牌——['Has-Token']作为自定义密钥。    // 请根据实际情况修改。    config.headers['Has-Token'] = getToken()    }    //在这里根据自己相关的需求做不同请求头的切换,我司是需要使用这两种请求头。    if (config.json) {      config.headers['Content-Type'] = 'application/json'    } else {      config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'      config.data = qs.stringify(config.data);   //利用qs做json序列化    }    return config  },  error => {    // 处理请求错误    console.log(error) // 调试    return Promise.reject(error)  })service.interceptors.response.use(  response => {    const res = response.data    //这是响应返回后的结果    //在这里可以根据返回的状态码对存在响应错误的请求做拦截,提前做处理。    //以下为我司的处理规则    // 如果自定义代码不是200,则判断为错误。    if (res.code == 200 || res.code == 300) {      // 重新登陆      MessageBox.confirm('您的登录状态存在问题,您可以取消以停留在此页面,或再次登录', '系统提示', {        confirmButtonText: '重新登录',        type: 'warning'      }).then(() => {        store.dispatch('user/resetToken').then(() => {          location.reload();        })      })      return    } else {      if (res.code == 700) {        Message.warning('您没有获取请求的权限!')        router.replace({          path: '/401'        })        return      } else {        return res      }    }    //end  },  error => {    console.log('err' + error)    Message({      message: error.message,      type: 'error',      duration: 5 * 1000    })    return Promise.reject(error)  })export default service

作者:陈宝玉啊
转发链接:https://www.jianshu.com/p/a5c8ce9542e6

axios封装_VUE.JS请求工具Axios的封装相关推荐

  1. python django前后台分离项目 请求工具axios(复制 粘贴即可使用)

    python django前后台分离项目中固定写法: 利用axios对接口数据进行请求并渲染 -------------------request.js-------------------- imp ...

  2. android post请求_Vue 网络请求框架 axios 使用教程

    点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...

  3. vue 获取url地址的参数_Vue 网络请求框架 axios 使用教程

    点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...

  4. 发送http和https请求工具类 Json封装数据

    在一些业务中我们可要调其他的接口(第三方的接口) 这样就用到我接下来用到的工具类. 用这个类需要引一下jar包的坐标 <dependency><groupId>org.jsou ...

  5. 基于HttpURLConnection 网络请求工具类的封装

    HttpUtils: /*** Created by xiaoyehai on 2018/5/21 0021.*/public class HttpUtils {//线程池private static ...

  6. js请求结果拦截机器_分享:一步一个脚印,vue入门之axios的应用及拦截封装

    一.概述 在vue2.0项目中,我们主要使用axios进行http请求. axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特征: 1.从浏览器中创建X ...

  7. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

  8. [js] fetch和axios请求的原理都是基于XMLHttpRerequst吗?

    [js] fetch和axios请求的原理都是基于XMLHttpRerequst吗? axios是基于XMLHttpRequest的封装,而fetch是js原生支持的网络请求api,这在浏览器底层进行 ...

  9. axios vue 回调函数_vue中ajax请求与axios包完美处理

    这次给大家带来vue中ajax请求与axios包完美处理,vue中ajax请求与axios包处理的注意事项有哪些,下面就是实战案例,一起来看一下. 在vue中,经常会用到数据请求,常用的有:vue-r ...

最新文章

  1. Python基本语法_强制数据类型转换
  2. 统一代码风格工具 editorConfig
  3. 湖南计算机应用专业较好的学校,好的计算机应用专业排名
  4. 【帖子收藏】ansible 中的循环:with_file 和 with_fileglob
  5. C#:invoke 与 BeginInvoke使用区别
  6. Python pytest框架之@pytest.fixture()和conftest详解
  7. XAF-UI元素概述
  8. 4999元起!华为Mate 40今日开启预售:搭载麒麟9000E
  9. 【Elasticsearch】match_phrase搜不出来,怎么办
  10. linux到windows的ssh,ssh如何使用pxsh从linux到windows
  11. Scala学习02——Scala类和对象
  12. C++函数参数中的省略号
  13. DM642的PCI驱动编程笔记:遍历一块内存空间的源码
  14. python多窗口显示内容_如何在一个窗口中显示多个页面?
  15. 游戏设计15大参考法则
  16. Linus 大神的在家办公经验(他也撸猫)
  17. 泰山OFFICE技术讲座:为字体调整字间距的研究,设置值何时生效
  18. 计算机组装前工具的准备,计算机组装 必备工具
  19. 20轮廓-hu不变矩的测试程序
  20. 万能 Makefile 模板

热门文章

  1. 编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
  2. laravel-admin配置安装完新手使用
  3. 17 HTTP编程入门
  4. Html----编写
  5. windows7 来了
  6. C# Hook原理及EasyHook简易教程
  7. 使用timer定时器,防止事件重入
  8. Java Selenium Actions模拟鼠标拖动dragAndDrop总结
  9. DotnetSpider (二) Downloader的设置 Request自定义数据字典
  10. oracle decode函数