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中的自定义指令
Dec 07 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
Vue操作Storage本地化存储
Apr 29 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
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
puppeteer库入门初探
2019/01/09 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
pygame实现非图片按钮效果
2019/10/29 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
广告设计应届生求职信
2014/03/01 职场文书
父母对孩子说的话
2014/04/12 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
群众路线剖析材料
2014/09/30 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL