axios请求拦截及请求超时重新请求设置
自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,需要解决问题:
1. 请求带token校验
2. post请求请求体处理
3. 响应未登录跳转登录页处理
4. 响应错误提示
5. 响应超时,重新请求处理
由于接口调用,基本每个页面都有,这些问题,也都可以全局处理,因此抽离了出来,保存为api/axios.js, 在main.js中引入。
处理过程中,借鉴了很多文章。借鉴的文章较多,就不一一列举了。
如有更好的建议,可以留言告诉我。谢谢^_^
// axios全局配置,包括验证检验及错误处理
import axios from 'axios'
import qs from 'qs'
import store from 'store'
import {code} from 'api/config'
import {Message} from 'element-ui' // 超时设置
const service = axios.create({
timeout: 10000
}) // 请求超时重新请求次数,请求间隙
axios.defaults.retry = 3
axios.defaults.retryDelay = 1000 // http request 拦截器
service.interceptors.request.use(
config => {
// 每次请求都为http头增加Authorization字段,其内容为token
if (store.state.user.token) {
config.headers['X-LMP-Auth-Token'] = store.state.user.token
}
// post请求参数处理
config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
if (config.method === 'post') {
if (!config.__retryCount || config.__retryCount === 0) { // 只处理第一次请求数据,保证后面请求超时请求数据正常
config.data = qs.stringify({...config.data})
}
}
return config
},
err => {
return Promise.reject(err)
}
) service.interceptors.response.use(
response => {
const data = response.data
if (data.code === code.errNotLogin) {
store.commit('user/setToken', '')
location.replace('/login')
} else {
return response
}
},
err => { // 请求超时,设置重新请求及错误提示
let config = err.config
if (!config || !config.retry) {
Message.error((err && err.data && err.data.msg) || '接口异常')
return Promise.reject(err)
}
// 设置请求超时次数
config.__retryCount = config.__retryCount || 0
if (config.__retryCount >= config.retry) {
Message.error((err && err.data && err.data.msg) || '接口异常')
return Promise.reject(err)
}
config.__retryCount += 1
let backoff = new Promise((resolve) => {
setTimeout(() => {
resolve()
}, config.retryDelay || 1)
})
return backoff.then(() => {
return service(config)
})
}
) export default service
axios请求拦截及请求超时重新请求设置的更多相关文章
- Feign 请求拦截器和日志
Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参 ...
- axios设置请求拦截和响应拦截
首先我们先创建axios实例 const service = axios.create({ baseURL: url, //是用于请求的服务器 URL timeout: 5000, // 请求超时时间 ...
- axios请求,拦截器的使用
1. axios 创建请求 import axios from 'axios' import {Message} from 'element-ui' import router from " ...
- Axios使用拦截器全局处理请求重试
Axios拦截器 Axios提供了拦截器的接口,让我们能够全局处理请求和响应.Axios拦截器会在Promise的then和catch调用前拦截到. 请求拦截示例 axios.interceptors ...
- 细说vue axios登录请求拦截器
当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...
- vue中前端处理token过期的方法与axios请求拦截处理
在处理token过期的这个问题上困扰了我很久,现在终于解决的了,所以分享出来给大家,希望能够对大家有所帮助. 首先,当然是路由进行拦截,路由拦截当然是在beforeEach中了: router.bef ...
- token回话保持,axios请求拦截和导航守卫以及token过期处理
1:了解token:有时候大家又说token令牌.整个机制是前端第一次登陆发送请求,后端会根据前端的用户名和密码, 通过一些列的算法的到一个token令牌, 这个令牌是独一无二的,前端每次发送请求都需 ...
- vue 路由拦截、axios请求拦截
路由拦截 项目中,有些页面需要登录后才能进入,例如,在某页面A,用户在操作前需要先进入登录页(此时需要将上一页的地址(/survey/start)作为query存入login页面的地址中,如: htt ...
- axios请求拦截器(修改Data上的参数 ==>把data上的参数转为FormData)
let instance = axios.create({ baseURL: 'http://msmtest.ishare-go.com', //请求基地址 // timeout: 3000,//请求 ...
随机推荐
- linux_开启mysql服务
想要连接mysql的时候必须先开启mysql的服务 service mysqld start mysql -u root -p 输入密码
- fabric 安装
fabric 是一个python的库,fabric可以通过ssh批量管理服务器. 第一步安装依赖包 安装fabric依赖及pip yum install -y python-pip gcc pytho ...
- nxn随机矩阵乘以概率向量依旧是概率向量
由上面可进一步推到出A*A是随机矩阵看成(A a1,A a2...A an) 所以A^m依然是随机矩阵.
- c++关键字extern的作用
1.用extern修饰变量 使用在别的在源文件定义的非静态外部变量时,需要使用extern进行说明 2.用extern修饰函数 使用在别的在源文件定义的函数时,需要使用extern进行说明 3.用ex ...
- ubuntu彻底删除apache2 再重装
删除apache2不彻底,导致用 apt-get install apache2 重新装时总是不成功.下面是如何彻底删除apache2 1. 删除apache 代码: $ sudo apt-get - ...
- Arria10中PHY的时钟线结构
发送器时钟网络由发送器PLL到发送器通道,它为发送器提供两种时钟 高速串行时钟——串化器的高速时钟 低速并行时钟——串化器和PCS的低速时钟 在绑定通道模式,串行和并行时钟都是由发送器的PLL提供给发 ...
- jquery的bind()和trigger()
本文主要介绍JQuery的trigger()和bind()方法. 1. $(selector).bind(event,data,function)方法为被选元素添加一个或多个事件处理程序,并规定事 ...
- 传输层TCP
/*************************************************************************************************** ...
- Build Laravel Blog PigJian by PHP7 and Nginx on Ubuntu
Recently, I found an interesting framework Laravel written by PHP. i have never used PHP to write an ...
- 如何对CentOS FTP服务配置
根据很多人对CentOS FTP服务的不解,我觉得应该对CentOS FTP服务做出一定的解释. 1.安装 一般在CentOS上都自动安装了vsftd,若没有安装则可以使用以下步骤进行安装yum -y ...