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 loading效果代码
Jun 18 Javascript
JS类的封装及实现代码
Dec 02 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
Nov 30 Javascript
在父页面调用子页面的JS方法
Sep 29 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
基于jquery步骤进度条源码分享
Nov 12 Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 Javascript
深入浅析AngularJS中的module(模块)
Jan 04 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
jQuery中Find选择器用法示例
Sep 21 Javascript
vue.js指令v-for使用及索引获取
Nov 03 Javascript
Vue项目引进ElementUI组件的方法
Nov 11 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 flush类输出缓冲剖析
2008/10/19 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP 微信支付类 demo
2015/11/30 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python单例模式实例分析
2015/01/14 Python
破解安装Pycharm的方法
2018/10/19 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
公司行政经理岗位职责
2013/12/24 职场文书
师恩难忘教学反思
2014/04/27 职场文书
机关党员公开承诺书
2014/08/30 职场文书
英语感谢信范文
2015/01/20 职场文书
高中政治教师教学反思
2016/02/23 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python