vue中axios的二次封装实例讲解


Posted in Javascript onOctober 14, 2019

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

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

vue中axios的二次封装实例讲解

import axios from 'axios'
import router from '@/router/routers'
import { Notification, MessageBox } from 'element-ui'
import store from '../store'
import { getToken } from '@/utils/auth'
import Config from '@/config'
 
import {baseUrl} from '@/utils/env'
 
// 创建axios实例
const service = axios.create({
 baseURL: baseUrl, // api 的 base_url
 // baseURL: process.env.BASE_API, // api 的 base_url
 timeout: Config.timeout // 请求超时时间
})
 
// request拦截器
service.interceptors.request.use(
 config => {
  if (getToken()) {
   config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  config.headers['Content-Type'] = 'application/json'
  return config
 },
 error => {
  // Do something with request error
  console.log(error) // for debug
  Promise.reject(error)
 }
)
 
// response 拦截器
service.interceptors.response.use(
 response => {
  const code = response.status
  console.log(response)
  if (code < 200 || code > 300) {
   Notification.error({
    title: response.message
   })
   return Promise.reject('error')
  } else {
   return response.data
  }
 },
 error => {
  let code = 0
  try {
   code = error.response.data.status
  } catch (e) {
   if (error.toString().indexOf('Error: timeout') !== -1) {
    Notification.error({
     title: '网络请求超时',
     duration: 2500
    })
    return Promise.reject(error)
   }
   if (error.toString().indexOf('Error: Network Error') !== -1) {
    Notification.error({
     title: '网络请求错误',
     duration: 2500
    })
    return Promise.reject(error)
   }
  }
  if (code === 401) {
   MessageBox.confirm(
    '登录状态已过期,您可以继续留在该页面,或者重新登录',
    '系统提示',
    {
     confirmButtonText: '重新登录',
     cancelButtonText: '取消',
     type: 'warning'
    }
   ).then(() => {
    store.dispatch('LogOut').then(() => {
     location.reload() // 为了重新实例化vue-router对象 避免bug
    })
   })
  } else if (code === 403) {
   router.push({ path: '/401' })
  } else {
   const errorMsg = error.response.data.message
   if (errorMsg !== undefined) {
    Notification.error({
     title: errorMsg,
     duration: 2500
    })
   }
  }
  return Promise.reject(error)
 }
)
export default service

代码解读:

vue中axios的二次封装实例讲解

 vue中axios的二次封装实例讲解

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

vue中axios的二次封装实例讲解

引入request.js

vue中axios的二次封装实例讲解

第三步,

在页面使用

vue中axios的二次封装实例讲解

vue中axios的二次封装实例讲解

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

以上就是关于vue中axios的二次封装的全部知识点内容,感谢大家的学习和对三水点靠木的支持。

Javascript 相关文章推荐
jquery 插件学习(二)
Aug 06 Javascript
JS获取键盘上任意按键的值(实例代码)
Nov 12 Javascript
javascript scrollTop正解使用方法
Nov 14 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
关于javaScript注册click事件传递参数的不成功问题
Jul 18 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
谈一谈js中的执行环境及作用域
Mar 30 Javascript
js无法获取到html标签的属性的解决方法
Jul 26 Javascript
jsp 自动编译机制详细介绍
Dec 01 Javascript
JS实现的简单轮播图运动效果示例
Dec 22 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 jQuery
vue路由的配置和页面切换详解
Sep 09 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 #Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
Oct 14 #Javascript
vue实现百度语音合成的实例讲解
Oct 14 #Javascript
vue中进行微博分享的实例讲解
Oct 14 #Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
Oct 14 #Javascript
Vue3.0 响应式系统源码逐行分析讲解
Oct 14 #Javascript
微信小程序 textarea 层级过高问题简单解决方案
Oct 14 #Javascript
You might like
php HandlerSocket的使用
2011/05/02 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
Python字符遍历的艺术
2008/09/06 Python
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
python并发和异步编程实例
2018/11/15 Python
python检测服务器端口代码实例
2019/08/31 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
python读取xml文件方法解析
2020/08/04 Python
python开发入门——set的使用
2020/09/03 Python
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
机械绘图员岗位职责
2013/11/19 职场文书
施工单位安全责任书
2014/07/24 职场文书
见习报告的格式
2014/11/04 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS