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 相关文章推荐
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
Oct 29 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
Jun 14 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
Antd中单个DatePicker限定时间输入范围操作
Oct 29 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中的外观模式facade pattern
2018/02/05 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
js实现简单模态框实例
2018/11/16 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python随机数函数代码实例解析
2020/02/09 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
十一个高级MySql面试题
2014/10/06 面试题
机关门卫岗位职责
2013/12/30 职场文书
给物业的表扬信
2014/01/21 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
司法局火灾防控方案
2014/06/05 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2014年生产部工作总结
2014/12/17 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
餐馆开业致辞
2015/08/01 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
详解MySQL连接挂死的原因
2021/05/18 MySQL
简单谈谈Python面向对象的相关知识
2021/06/28 Python
mysq启动失败问题及场景分析
2021/07/15 MySQL