vue中axios的二次封装 - 菜鸟的编程VLOG

WangXinPeng 2021-08-27 原文

我们做项目时,虽然axios也可以直接拿来用,但是对接口比较零散,不太好进行维护,也会产生大量的重复代码,所以我在这对axios进行了统一接口处理

第一步,先在src中的公共文件夹中如utils里新建request.js文件

 

 

  1. import axios from \'axios\'
  2. import router from \'@/router/routers\'
  3. import { Notification, MessageBox } from \'element-ui\'
  4. import store from \'../store\'
  5. import { getToken } from \'@/utils/auth\'
  6. import Config from \'@/config\'
  7.  
  8. import {baseUrl} from \'@/utils/env\'
  9.  
  10. // 创建axios实例
  11. const service = axios.create({
  12. baseURL: baseUrl, // api 的 base_url
  13. // baseURL: process.env.BASE_API, // api 的 base_url
  14. timeout: Config.timeout // 请求超时时间
  15. })
  16.  
  17. // request拦截器
  18. service.interceptors.request.use(
  19. config => {
  20. if (getToken()) {
  21. config.headers[\'Authorization\'] = \'Bearer \' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  22. }
  23. config.headers[\'Content-Type\'] = \'application/json\'
  24. return config
  25. },
  26. error => {
  27. // Do something with request error
  28. console.log(error) // for debug
  29. Promise.reject(error)
  30. }
  31. )
  32.  
  33. // response 拦截器
  34. service.interceptors.response.use(
  35. response => {
  36. const code = response.status
  37. console.log(response)
  38. if (code < 200 || code > 300) {
  39. Notification.error({
  40. title: response.message
  41. })
  42. return Promise.reject(\'error\')
  43. } else {
  44. return response.data
  45. }
  46. },
  47. error => {
  48. let code = 0
  49. try {
  50. code = error.response.data.status
  51. } catch (e) {
  52. if (error.toString().indexOf(\'Error: timeout\') !== -1) {
  53. Notification.error({
  54. title: \'网络请求超时\',
  55. duration: 2500
  56. })
  57. return Promise.reject(error)
  58. }
  59. if (error.toString().indexOf(\'Error: Network Error\') !== -1) {
  60. Notification.error({
  61. title: \'网络请求错误\',
  62. duration: 2500
  63. })
  64. return Promise.reject(error)
  65. }
  66. }
  67. if (code === 401) {
  68. MessageBox.confirm(
  69. \'登录状态已过期,您可以继续留在该页面,或者重新登录\',
  70. \'系统提示\',
  71. {
  72. confirmButtonText: \'重新登录\',
  73. cancelButtonText: \'取消\',
  74. type: \'warning\'
  75. }
  76. ).then(() => {
  77. store.dispatch(\'LogOut\').then(() => {
  78. location.reload() // 为了重新实例化vue-router对象 避免bug
  79. })
  80. })
  81. } else if (code === 403) {
  82. router.push({ path: \'/401\' })
  83. } else {
  84. const errorMsg = error.response.data.message
  85. if (errorMsg !== undefined) {
  86. Notification.error({
  87. title: errorMsg,
  88. duration: 2500
  89. })
  90. }
  91. }
  92. return Promise.reject(error)
  93. }
  94. )
  95. export default service

  代码解读:

 

 

 

 

将接口统一放到单独的文件中如我的

引入request.js

 

 

第三步,

在页面使用

 

 

 

好了,这就是axios的二次封装

 

发表于
2019-10-14 11:32 
菜鸟的编程VLOG 
阅读(1916
评论(0
编辑 
收藏 
举报

 

版权声明:本文为WangXinPeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/WangXinPeng/p/11670601.html

vue中axios的二次封装 - 菜鸟的编程VLOG的更多相关文章

  1. js 获取checkbox 全选及选中的文本 – 且行且思

    <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 T […]...

  2. PowerDesigner教程系列(六)概念数据模型 – KevinYin

      目标:本文主要介绍联系的定义及使用。  一、 联系联系(Relationship)是指实体集这间或实体集内 […]...

  3. JDK和Tomcat环境变量,以及用MyEclipse新建Web Project测试Tomcat Server – 老坛酸菜WH

    JDK和Tomcat环境变量,以及用MyEclipse新建Web Project测试Tomcat Server […]...

  4. Multisim14.0安装步骤 – yf.x

    Multisim14.0安装步骤 免责声明:以下图片资源来源于Internet,作搜集学习之用。       […]...

  5. Jmeter(十六) – 从入门到精通 – JMeter前置处理器(详解教程)

    1.简介   前置处理器是在发出“取样器请求”之前执行一些操作。如果将前置处理器附加到取样器元件,则它将在该取 […]...

  6. 说说这半年做的一个项目,并分享给各位 – 贺臣

    说说这半年做的一个项目,并分享给各位 2018-10-30 09:31  贺臣  阅读(4435)  评论(2 […]...

  7. 浏览器渲染html的过程 – 抄手砚

    浏览器渲染html的过程 关于浏览器如何渲染html界面一直不太清晰,所以现在理一理。由于本身对前深入的东西不 […]...

  8. eclispse + tomcat 启动是不加载项目的解决办法

    有一个java spring的项目一直好好的,突然一天不能启动了。eclipse的console没有报任何错误 […]...

随机推荐

  1. 最好的Java IDE之争:Eclipse PK IntelliJ IDEA

    转自:https://blog.csdn.net/tanqian351/article/details/523 […]...

  2. linux 磁盘空间满了,排查记录

    先贴命令:du -m –max-depth=1或du -h –max-depth=1d […]...

  3. 人脸识别技术全面总结:从传统方法到深度学习[转载自机器之心]

    论文地址:https://arxiv.org/abs/1811.00116    自七十年代以来,人脸识别已经 […]...

  4. async语法升级踩坑小记

    从今年过完年回来,三月份开始,就一直在做重构相关的事情。 就在今天刚刚上线了最新一次的重构代码,希望高峰期安好 […]...

  5. 泛型编程

    目录   1. 函数模板     1.1 函数模板的来源     1.2 函数模板的定义     1.3 函数 […]...

  6. 利用SQL语句产生分组序号

    partition  by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录, […]...

  7. JUnit 5和Selenium基础(二)

    使用Selenium内置的PageFactory实现页面对象模式 在这一部分中,将通过Selenium的内置P […]...

  8. Android 对话框(Dialog)基础

    Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如 onCreateDialog(in […]...