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 + el-form 实现的多层循环表单验证
Nov 25 Vue.js
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vuex的使用步骤
Jan 06 Vue.js
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 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
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
YII中assets的使用示例
2014/07/31 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
pycharm 使用心得(四)显示行号
2014/06/05 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python requests模块实例用法
2019/02/11 Python
Python处理PDF与CDF实例
2020/02/26 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
会计毕业生自荐信
2013/11/21 职场文书
施工安全协议书
2013/12/11 职场文书
2014年客房部工作总结
2014/11/22 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
西游降魔篇观后感
2015/06/15 职场文书
结婚纪念日感言
2015/08/01 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
初中数学教学反思范文
2016/02/17 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang