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模仿ie的自动完成类似自动完成功的表单
Dec 12 Javascript
jquery中文乱码的多种解决方法
Jun 21 Javascript
jquery实现点击消失的代码
Mar 03 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
简单实现jquery焦点图
Dec 12 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
vue.js+Element实现表格里的增删改查
Jan 18 Javascript
浅谈React组件之性能优化
Mar 02 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 09 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
smarty模板引擎之分配数据类型
2015/03/30 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
python利用百度AI实现文字识别功能
2018/11/27 Python
python实现扫描ip地址的小程序
2019/04/16 Python
python实现无边框进度条的实例代码
2020/12/30 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
Shell编程面试题
2012/05/30 面试题
大学本科生职业生涯规划书范文
2014/09/14 职场文书
超市创业计划书
2014/09/15 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年教研室工作总结
2014/12/06 职场文书
慰问信格式规范
2015/03/23 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
被告代理词范文
2015/05/25 职场文书
主题班会开场白
2015/06/01 职场文书
入党转正介绍人意见
2015/06/03 职场文书
初中政治教学反思
2016/02/23 职场文书
python爬虫--selenium模块
2021/03/31 Python
go语言map与string的相互转换的实现
2021/04/07 Golang
HTML基础详解(上)
2021/10/16 HTML / CSS
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL