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 XML数据显示为HTML一例
Dec 23 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
Jun 11 Javascript
jQuery中:empty选择器用法实例
Dec 30 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
理解Angular数据双向绑定
Jan 10 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
Sep 18 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
js中url对象化管理分析
Dec 29 Javascript
快速搭建vue2.0+boostrap项目的方法
Apr 09 Javascript
js中call()和apply()改变指针问题的讲解
Jan 17 Javascript
vue 实现上传组件
May 31 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
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
Node.js学习教程之Module模块
2019/09/03 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Python处理PDF与CDF实例
2020/02/26 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
python小白切忌乱用表达式
2020/05/29 Python
如何在python中判断变量的类型
2020/07/29 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
客户代表实习人员自我鉴定
2013/09/27 职场文书
九一八事变演讲稿
2014/09/05 职场文书
户籍证明书标准模板
2014/09/10 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
班主任经验交流材料
2014/12/16 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers