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+vant实现购物车全选和反选功能
Nov 17 Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
基于vue的video播放器的实现示例
Feb 19 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php操作redis缓存方法分享
2015/06/03 PHP
php实现倒计时效果
2015/12/19 PHP
浅谈PHP中的
2016/04/23 PHP
如何学习Javascript入门指导
2013/11/01 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python中删除文件的程序代码
2011/03/13 Python
在Django中创建动态视图的教程
2015/07/15 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python实现泊松图像融合
2018/07/26 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
旅游管理专业个人求职信范文
2013/12/24 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
使用python绘制分组对比柱状图
2022/04/21 Python
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技