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的一些看法
May 27 Javascript
鼠标滑过出现预览的大图提示效果
Feb 26 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
JavaScript使用readAsDataURL读取图像文件
May 10 Javascript
深入理解vue.js中的v-if和v-show
Jun 22 Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
Jan 08 Javascript
echarts统计x轴区间的数值实例代码详解
Jul 07 Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
Apr 09 Javascript
微信小程序picker组件两列关联使用方式
Oct 27 Javascript
vue实现简易计算器功能
Jan 20 Vue.js
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
PHP4之真OO
2006/10/09 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
JQuery toggle使用分析
2009/11/16 Javascript
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
Python 如何访问外围作用域中的变量
2016/09/11 Python
简单了解什么是神经网络
2017/12/23 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
创联软件面试题笔试题
2012/10/07 面试题
社区平安建设方案
2014/05/25 职场文书
故意伤害辩护词
2015/05/21 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android