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-cli 创建模板项目
Nov 19 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
vue3.0实现插件封装
Dec 14 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
Vue实现省市区三级联动
Dec 27 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
Vue的过滤器你真了解吗
Feb 24 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
php中static和const关键字用法分析
2016/12/07 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python框架django项目部署相关知识详解
2019/11/04 Python
基于python操作ES实例详解
2019/11/16 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
导游个人求职信范文
2014/03/23 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
建设工程授权委托书
2014/09/22 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
先进集体申报材料
2014/12/25 职场文书
成本会计岗位职责
2015/02/03 职场文书
民政局未婚证明
2015/06/15 职场文书
安全生产感想
2015/08/07 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
Python实现聚类K-means算法详解
2022/07/15 Python