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 相关文章推荐
几个有趣的Javascript Hack
Jul 24 Javascript
JS+CSS实现Li列表隔行换色效果的方法
Feb 16 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
javascript帧动画(实例讲解)
Sep 02 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
Vue的属性、方法、生命周期实例代码详解
Sep 17 Javascript
vue props 一次传多个值实例
Jul 22 Javascript
JS中箭头函数与this的写法和理解
Jan 14 Javascript
关于Js中new操作符的作用详解
Feb 21 Javascript
关于Javascript闭包与应用的详解
Apr 22 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选项与信息函数的使用详解
2013/05/10 PHP
php中session使用示例
2014/03/29 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
微信小程序block的使用教程
2018/04/01 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
Python selenium如何设置等待时间
2016/09/15 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python enumerate内置库用法解析
2020/02/24 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
自荐信的两点禁忌
2013/10/30 职场文书
幸福中国演讲稿
2014/09/12 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
志愿服务心得体会
2016/01/15 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
Java并发编程必备之Future机制
2021/06/30 Java/Android
Python 数据可视化之Seaborn详解
2021/11/02 Python