Vue项目中如何使用Axios封装http请求详解
作者:月光光 发布时间:2024-04-28 09:19:49
标签:vue,axios,封装
前言
使用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


猜你喜欢
- 这个函数用于储存图片,将数组保存为图像此功能仅在安装了Python Imaging Library(PIL)时可用。版本也比较老了,新的替代
- 介绍海象运算符,即 := ,在 PEP 572 中被提出,并在 Python3.8 版本中发布。海象运算符的英文原名叫Assignment
- 要点说明在绘制散点图的时候,通常使用变量作为输入数据的载体。其实,也可以使用字符串作为输入数据的存储载体。下面代码的data = {“a”:
- 目录程序的组织结构顺序结构对象的布尔值选择结构单分支结构小实验双分支结构小实验多分支结构小实验python代码的独特写法分支结构_嵌套if的
- 段落已经讲完了,那么一些基本的应用方式也讲了一些,那么是否已经应用了呢?当然应用可以更为丰富,那么这些就需要自己在实际工作中不断的摸索与思考
- 如下所示:>>> import numpy as np>>> a = np.array([[1, 2,
- PyCharm PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法
- 概述从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类
- python中安装包的方式有很多种:源码包:python setup.py install在线安装:pip install 包名(linux
- 代码如下:--Begin Index(索引) 分析优化的相关 Sql -- 返回当前数据库所有碎片率大于25%的索引 -- 运行
- 当遇到一个模板标签(template tag)时,模板解析器就会把标签包含的内容,以及模板解析器自己作为参数调用一个python函数。 这个
- sign签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的appkey钥匙才能调用,确保了接口的安全性。签名参数sign生成方法
- 先来看看微信读书的效果实现思路这个效果比较简单,主要是旋转view,然后在旋转结束后更换view的背景,考虑到需要旋转view,所以使用动画
- 今天我们来一起看看Dreamweaver MX 2004在加密FTP 传送 方面的新功能。我们一般在做
- 本文实例讲述了js实现带有介绍的Select列表菜单。分享给大家供大家参考。具体如下:带有介绍的Select列表菜单特效代码,并不是导航菜单
- 本文以sql2012为例第一步,(查询日志中文件名和大小):USE 数据库名GOSELECT file_id, name,size,* FR
- 个人类型和海外类型的小程序不支持 web-view 标签 也就是说个人申请的小程序,就别想跳转了!!!!1.开发的时候,我们难免
- 1. 引言pprint的英文全称Data pretty printer,顾名思义就是让显示结果更加直观漂亮。print()和pprint()
- 文件处理流程1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件 r模式,默认模式,文件不存在则报错w
- python判断一个变量是否已经设置的方法:可以使用locals()函数来进行判断。locals()函数会以字典类型返回当前位置的全部局部变