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 相关文章推荐
非常好的js代码
Jun 27 Javascript
javascript Object与Function使用
Jan 11 Javascript
this和执行上下文实现代码
Jul 01 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
JavaScript常用基础知识强化学习
Dec 09 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
Nov 06 Javascript
vue中mint-ui的使用方法
Apr 04 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
Sep 30 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
基于angular实现树形二级表格
Oct 16 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系列学习之日期函数使用介绍
2012/08/18 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
详解php中反射的应用
2016/03/15 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
jQuery的一些注意
2006/12/06 Javascript
Document 对象的常用方法
2009/07/31 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Django卸载之后重新安装的方法
2017/03/15 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
手机被没收检讨书
2014/02/22 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
欠条格式范本
2015/07/03 职场文书
认识实习感想
2015/08/10 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
python munch库的使用解析
2021/05/25 Python
python字典进行运算原理及实例分享
2021/08/02 Python