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+iview分页组件的封装
Nov 17 Vue.js
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
Vue监视数据的原理详解
Feb 24 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
python 自动提交和抓取网页
2009/07/13 Python
python基础教程之udp端口扫描
2014/02/10 Python
python解析xml文件操作实例
2014/10/05 Python
python操作 hbase 数据的方法
2016/12/18 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Python 列表反转显示的四种方法
2020/11/16 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
迎八一活动主题
2014/01/31 职场文书
岗位职责风险防控
2014/02/18 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
产品委托授权书范本
2014/09/16 职场文书
党员先进事迹材料
2014/12/19 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
庆祝教师节主持词
2015/07/06 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
运动会100米广播稿
2015/08/19 职场文书
高中语文教学反思范文
2016/02/16 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python