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 elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
vue中data里面的数据相互使用方式
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
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
Javascript 解疑
2009/11/11 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
视觉直观感受若干常用排序算法
2017/04/13 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Python实现图片拼接的代码
2018/07/02 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
python实现处理mysql结果输出方式
2020/04/09 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
年检委托书
2014/08/30 职场文书