Vue项目中如何使用Axios封装http请求详解
作者:月光光 时间:2024-04-28 09:19:49
前言
使用axios可以统一做请求响应拦截,例如请求响应时我们拦截响应信息,判断状态码,从而弹出报错信息。请求超时的时候断开请求,还可以很方便地使用then或者catch来处理请求。
下载源码
安装
npm install axios --save
建立http.js文件
在/src/utils/目录下建立一个htttp.js
1.首先导入axios和router。
import axios from 'axios';
import router from '../router';
2.接着设置axios请求参数。
axios.defaults.timeout = 5000; //请求超时5秒
axios.defaults.baseURL =''; //请求base url
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //设置post请求是的header信息
如果你要用到session验证码功能,让请求携带cookie,可以加上以下一行:
axios.defaults.withCredentials = true
3.然后,我们要给请求加个 * ,就是在请求即将发送之前,我们需要给请求添加信息,比如下面的代码中,我们给请求添加header信息,header中添加token,这样每次请求都会在header中携带token信息。这在我们的接口开发中经常用到。
//http request *
axios.interceptors.request.use(
config => {
let token = sessionStorage.getItem('token')
if (token) { // 判断是否存在token,如果存在的话,则每个http header都加上token
config.headers = {
'X-token': token
}
}
return config
},
err => {
return Promise.reject(err)
}
)
4.接下来,我们看下请求返回时的 * 。
比如我们发送请求时,如果后端返回错误代码,则前端应该提示信息。比如后台返回没有权限,不允许访问,跳转到登录页,这些都可在 * 上完成。
axios.interceptors.response.use(
response => {
if (response.data.code === 4003) {
Toast({
mes: '您没有权限操作!',
timeout: 1500,
callback: () => {
router.go(-1);
}
});
return false;
}
if (response.data.code === -1) {
localStorage.removeItem('token')
router.push({
path:"/login",
querry:{redirect: router.currentRoute.fullPath}//从哪个页面跳转
})
}
return response
},
err => {
if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
Toast({
mes: '网络异常,连接超时...',
timeout: 1500
});
}
return Promise.reject(err)
}
)
5.现在我们来封装一个get方法:
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/
export function get(url, params={}, headers={}){
return new Promise((resolve, reject) => {
axios.get(url,{
params: params,
headers: headers
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err)
})
})
}
6.再封装一个post方法:
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function post(url, data = {}){
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
使用
在main.js中引入:
import {post,get} from './utils/http'
//定义全局变量
Vue.prototype.$post = post;
Vue.prototype.$get = get;
在组件中使用:
this.$post(url, params)
.then((res) => {
if (res.result === 'success') {
this.$message({
message: '登录成功!',
type: 'success'
})
this.$router.push('/main')
} else {
this.$message.error(res.msg)
this.refreshCode();
}
});
这段代码是用户登录发送post请求的代码示例,其他get请求也是一样的处理方式。接下来我们会有文章具体讲解如何使用封装好的axios实现登录的例子,敬请关注。
来源:https://www.helloweba.net/javascript/617.html
标签:vue,axios,封装
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
OpenCV MediaPipe实现颜值打分功能
2022-06-19 08:22:16
![](https://img.aspxhome.com/file/2023/9/114749_0s.jpg)
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2022-06-22 13:44:49
![](https://img.aspxhome.com/file/2023/5/86155_0s.png)
vue获取data数据改变前后的值方法
2024-04-30 10:35:10
模拟兼容性的 addDOMLoadEvent 事件
2009-07-31 12:37:00
mysql 5.7.14 下载安装、配置与使用详细教程
2024-01-15 14:39:25
微信小程序开发之animation循环动画实现的让云朵飘效果
2024-04-16 09:00:11
![](https://img.aspxhome.com/file/2023/6/136726_0s.jpg)
WebStorm 遇到的问题总结
2023-08-31 23:30:00
![](https://img.aspxhome.com/file/2023/5/132295_0s.gif)
css reset中的list-style:none
2010-05-26 13:56:00
![](https://img.aspxhome.com/file/UploadPic/20105/26/01-62s.jpg)
详解Ubuntu Server下启动/停止/重启MySQL数据库的三种方式
2024-01-26 12:42:11
通过python绘制华强买瓜的字符画视频的步骤详解
2022-03-01 05:42:43
![](https://img.aspxhome.com/file/2023/3/118663_0s.jpg)
在Django的视图中使用数据库查询的方法
2024-01-14 20:03:20
python3实现多线程聊天室
2021-09-11 07:35:47
![](https://img.aspxhome.com/file/2023/9/75249_0s.png)
JavaScript实现的一个计算数字步数的算法分享
2024-05-03 15:32:42
python字符串操作
2022-11-30 18:04:40
发散后的期望
2008-07-31 18:32:00
tensorflow如何批量读取图片
2023-10-25 03:50:25
![](https://img.aspxhome.com/file/2023/2/120962_0s.jpg)
python实现发送带附件的邮件代码分享
2021-11-24 12:28:30
使用pycharm生成代码模板的实例
2021-03-07 04:57:52
python 边缘扩充方式的实现示例
2021-03-30 23:28:17
![](https://img.aspxhome.com/file/2023/4/115514_0s.jpg)
python扩展库numpy入门教程
2022-05-05 14:28:05