首页 > 其他分享 >Vue项目中封装axios统一管理http请求

Vue项目中封装axios统一管理http请求

时间:2024-03-11 09:44:56浏览次数:29  
标签:axios http users Vue 请求 option

            <div id="content_views" class="markdown_views prism-tomorrow-night">
                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                <h3><a name="t0"></a><a id="1_0"></a>1、需求说明</h3> 

在使用Vue.js框架开发前端项目时,会经常发送ajax请求服务端接口,在开发过程中,需要对axios进一步封装,方便在项目中的使用。

2、Vue项目结构

在本地创建Vue项目,目录结构如下:

 - public		静态资源文件
 - src
	|- assets		静态资源目录
	|- components	公共组件目录
	|- http			axios封装目录
	|- router		路由管理目录
	|- store		状态管理目录
	|- views		视图组件目录
	|- App.vue		根组件
	|- main.js		入口文件
 - package.json		npm配置文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在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'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

/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
})
}

<span class="token keyword">return</span> result

}

export default http

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

在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')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在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)
})

<span class="token punctuation">}</span>

}
}
</script>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

这里需要有 http://localhost:3000/users/find 接口,不然请求会失败!

4、效果演示

启动Vue项目,在浏览器中访问Vue项目的地址,我的地址是 http://localhost:8080,点击按钮发送请求,获取的结果如下图所示。
在这里插入图片描述
到此,在Vue项目中就完成了简单的axios封装,你也可以根据自己的实际需求对axios进行封装,本文只是提供参考。

    </div>

标签:axios,http,users,Vue,请求,option
From: https://www.cnblogs.com/mounterLove/p/18061557

相关文章

  • vue性能优化一(打包)
    1.依赖插件等无需每次打包都重新打包vite.config.js文件中配置exportdefault()=>{return{build:{sourcemap:false,manifest:true,rollupOptions:{output:{manualCh......
  • vs2019单独重新安装python37_64失败解决办法(bilibili上我最早写的是https://www.bilib
    上个周末的时候,我发现用vs2019编写python的时候。代码高亮出现了奇怪的问题,进入解决方案的时候,print还是蓝色的,但是过了几秒钟后就变为黑色了,因此在最开始的时候我试图通过换一个皮肤和在管理扩展里面找扩展来解决,但是还是有相关问题。于是到vs2019对应的python文件夹找问题,目录是......
  • vuex
    3.VUEX原理图:3.1概念在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。3.2何时使用?多个组件需要共享数据时1.多个组件依赖于同一状态2.来自不同组件的行为需要变更同......
  • Jetty的http-forwarded模块
    启用http-forwarded模块,执行如下命令:java-jar$JETTY_HOME/start.jar--add-modules=http-forwarded命令的输出,如下:INFO:http-forwardedinitializedin${jetty.base}/start.d/http-forwarded.iniINFO:Basedirectorywasmodifiedhttp-forwarded模块的配置文件$J......
  • Jetty的http2模块
    启用http2模块,执行如下命令:java-jar$JETTY_HOME/start.jar--add-modules=http2命令的输出,如下:INFO:http2initializedin${jetty.base}/start.d/http2.iniINFO:Basedirectorywasmodifiedhttp2模块的配置文件$JETTY_BASE/start.d/http2.ini,内容如下:......
  • HttpClientHandler VS SocketsHttpHandler
    .NETFramework和.NETCore2.0及更低版本中由HttpClient使用的默认消息处理程序为HttpClientHandler。从.NETCore2.1开始,类SocketsHttpHandler提供了更高级别的HTTP网络类(例如HttpClient)使用的实现。使用SocketsHttpHandler提供了许多优点:与之前的实施相比,性能......
  • Vue3学习(二十三)- 保存文档内容正常显示
    写在前面情人节已经接近尾声了,虽然跟我没什么关系,但是我还是很渴望,能遇到一个良人相伴一生。现在时间:内心异常平静,相对吵闹我更喜欢安静的晚上,没人打扰,enjoy自己独处的时间!保存内容显示1、任务拆解读取已保存内容将读取内容在富文本里显示2、读取已保存内容这个很好......
  • 在VueJS中使用 froala 富文本编辑器
    安装包npminstallvue-froala-wysiwyg--save集成组件import'./assets/main.css'//ImportFroalaEditorimport'froala-editor/js/plugins.pkgd.min.js';//Importthirdpartypluginsimport'froala-editor/js/third_party/embedly.min';......
  • vuex
    Vuex快速入门简介Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。安装在项目根目录执行如下命令来安装Vuex若失败,可使用cnpmnpminstallvuex--save修改main.js......
  • vue前端框架的使用
    最近需要改造一个旧项目,旧项目使用的springremote,需求,将前端页面单独分离出一个应用服务,这里将使用node.js作为服务技术栈使用的前端框架是vue,这里使用的版本是vue2.9听说2.x跟3.x版本有一定的区别.先研究一下2.x之前只知道nodejs能够挂载静态页面云云,之前有项目这样......