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 相关文章推荐
IE iframe的onload方法分析小结
Jan 07 Javascript
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
异步javascript的原理和实现技巧介绍
Nov 08 Javascript
Jquery动态添加及删除页面节点元素示例代码
Jun 16 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 Javascript
bootstrap datetimepicker日期插件使用方法
Jan 13 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 Javascript
JavaScript缓动动画函数的封装方法
Nov 25 Javascript
JS实现页面侧边栏效果探究
Jan 08 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记录日志的实现代码
2011/08/08 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
Python logging模块学习笔记
2014/05/24 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python基于opencv实现人脸识别
2021/01/04 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
建筑总经理岗位职责
2014/02/02 职场文书
学校节能减排倡议书
2014/05/16 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
公务员培的训心得体会
2014/09/01 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
详解python的内存分配机制
2021/05/10 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL