Vue项目中如何封装axios(统一管理http请求)

这篇文章主要给大家介绍了关于Vue项目中如何封装axios(统一管理http请求)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值

Posted in Vue.js onMay 02, 2021

1、需求说明

在使用Vue.js框架开发前端项目时,会经常发送ajax请求服务端接口,在开发过程中,需要对axios进一步封装,方便在项目中的使用。

2、Vue项目结构

在本地创建Vue项目,目录结构如下:

 - public  静态资源文件
 - src
 |- assets  静态资源目录
 |- components 公共组件目录
 |- http   axios封装目录
 |- router  路由管理目录
 |- store  状态管理目录
 |- views  视图组件目录
 |- App.vue  根组件
 |- main.js  入口文件
 - package.json  npm配置文件

在Vue项目中创建 http目录 作为axios的管理目录,在 http目录 下两个文件,分别是

  • /http/index.js 封装axios方法的文件
  • /http/api.js 统一管理接口的文件

3、代码示例

/http/api.js文件代码如下:

export default {
    'users_add': '/users/add',
    'users_find': '/users/find',
    'users_update': '/users/update',
    'users_delete': '/users/delete'
}

/http/index.js文件代码如下:

import axios from 'axios'
import api from './api'
 
//创建axios实例对象
let instance = axios.create({
    baseURL: 'http://localhost:3000', //服务器地址
    timeout: 5000 //默认超时时长
})
 
//请求拦截器
instance.interceptors.request.use(config=>{
    //此处编写请求拦截的代码,一般用于弹出加载窗口
    console.log('正在请求……')
    return config
},err=>{
    console.error('请求失败',err)
})
 
//响应拦截器
instance.interceptors.response.use(res=>{
    //此处对响应数据做处理
    console.log('请求成功!')
    return res //该返回对象会传到请求方法的响应对象中
},err=>{
    // 响应错误处理
    console.log('响应失败!',err)
    // return Promise.reject(err);
})
 
//封装axios请求方法,参数为配置对象
//option = {method,url,params} method为请求方法,url为请求接口,params为请求参数
async function http(option = {}) {
    let result = null
    if(option.method === 'get' || option.method === 'delete'){
     //处理get、delete请求
        await instance[option.method](
                api[option.url],
                {params: option.params}
          ).then(res=>{
            result = res.data
        }).catch(err=>{
            result = err
        })
    }else if(option.method === 'post' || option.method === 'put'){
     //处理post、put请求
        await instance[option.method](
                api[option.url],
                option.params
            ).then(res=>{
            result = res.data
        }).catch(err=>{
            result = err
        })
    }
 
    return result
}
 
export default http

在main.js入口文件中引入封装好的 /http/index.js 文件,示例代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import http from './http'
 
Vue.config.productionTip = false
Vue.prototype.$http = http
 
Vue.use(Elementui)
 
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

在App.vue根组件中测试axios请求,示例代码如下:

<template>
  <div>
    <button @click="getDate">发送请求</el-button>
  </div>
</template>
 
<script>
export default {
  methods: {
    getDate(){
      this.$http({
        method: 'get',
        url: 'users_find'
      }).then(res=>{
        console.log(res)
      })
 
    }
  }
}
</script>

这里需要有 http://localhost:3000/users/find 接口,不然请求会失败!

4、效果演示

启动Vue项目,在浏览器中访问Vue项目的地址,我的地址是 http://localhost:8080,点击按钮发送请求,获取的结果如下图所示。

到此,在Vue项目中就完成了简单的axios封装,你也可以根据自己的实际需求对axios进行封装,本文只是提供参考。

Vue.js 相关文章推荐
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
vue实现登录功能
Dec 31 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
vue实现可移动的悬浮按钮
Mar 04 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
VUE递归树形实现多级列表
Jul 15 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
vue使用v-model进行跨组件绑定的基本实现方法
关于vue中如何监听数组变化
vue实现简单数据双向绑定
Apr 28 #Vue.js
vue引入Excel表格插件的方法
Apr 28 #Vue.js
原生JS封装vue Tab切换效果
vue项目两种方式实现竖向表格的思路分析
You might like
浅析php学习的路线图
2013/07/10 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
python中关于for循环的碎碎念
2017/06/30 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
django的model操作汇整详解
2019/07/26 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
python定义具名元组实例操作
2021/02/28 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
有针对性的求职自荐信
2013/11/14 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
论文答辩开场白大全
2015/05/27 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers