自从使用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请求拦截及请求超时重新请求设置的更多相关文章

  1. Feign 请求拦截器和日志

    Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参 ...

  2. axios设置请求拦截和响应拦截

    首先我们先创建axios实例 const service = axios.create({ baseURL: url, //是用于请求的服务器 URL timeout: 5000, // 请求超时时间 ...

  3. axios请求,拦截器的使用

    1. axios 创建请求 import axios from 'axios' import {Message} from 'element-ui' import router from " ...

  4. Axios使用拦截器全局处理请求重试

    Axios拦截器 Axios提供了拦截器的接口,让我们能够全局处理请求和响应.Axios拦截器会在Promise的then和catch调用前拦截到. 请求拦截示例 axios.interceptors ...

  5. 细说vue axios登录请求拦截器

    当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...

  6. vue中前端处理token过期的方法与axios请求拦截处理

    在处理token过期的这个问题上困扰了我很久,现在终于解决的了,所以分享出来给大家,希望能够对大家有所帮助. 首先,当然是路由进行拦截,路由拦截当然是在beforeEach中了: router.bef ...

  7. token回话保持,axios请求拦截和导航守卫以及token过期处理

    1:了解token:有时候大家又说token令牌.整个机制是前端第一次登陆发送请求,后端会根据前端的用户名和密码, 通过一些列的算法的到一个token令牌, 这个令牌是独一无二的,前端每次发送请求都需 ...

  8. vue 路由拦截、axios请求拦截

    路由拦截 项目中,有些页面需要登录后才能进入,例如,在某页面A,用户在操作前需要先进入登录页(此时需要将上一页的地址(/survey/start)作为query存入login页面的地址中,如: htt ...

  9. axios请求拦截器(修改Data上的参数 ==>把data上的参数转为FormData)

    let instance = axios.create({ baseURL: 'http://msmtest.ishare-go.com', //请求基地址 // timeout: 3000,//请求 ...

随机推荐

  1. Servlet------EL表达式

    EL表达式是: Expression Language.一种写法非常简介的表达式.语法简单易懂,便于使用..获取作用域的数据.... 对比: 传统方式获取作用域数据:                缺 ...

  2. java常用设计模式总览

    一.java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...

  3. java json注解

    (1)初级我们从几个简单的使用场景开始:重命名属性,忽略属性,以及修改属性所使用的类型.注意:下面的例子仅仅显示了成员属性(field properties),注解同样也可以用在成员方法(getter ...

  4. lambda表达式(c++11)

    1.概念 1)lambda表达式是一个可调用的代码单元,它由一个捕获列表.一个参数列表.一个箭头.一个返回类型.一个函数体组成: 2)可以忽略参数列表和返回类型,但必须包含捕获列表和函数体: 3)忽略 ...

  5. 安装SourceTree遇到的一个个坑

    之前在公司的电脑上满心欢喜的安装了下,很顺利就成功了,回来在自己电脑上安装,结果坑不能停,以此来纪念下吧! 下载完成后,进行安装: 这里我是申请了个账户,选第一个user an existing ac ...

  6. 如何通过Openssl实现私有CA,并为HTTP服务提供TLS/SLL安全机制

    原文链接:http://guodayong.blog.51cto.com/263451/1181059 Openssl是SSL的开源实现(可以免费下载应用程序),是一种安全机密程序,主要用于提高远程登 ...

  7. Visual C++实现局域网IP多播

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  8. bzoj2893(费用流)

    先缩点,然后拆点,其实是很经典的一种操作,把不好做的点拆成边,然后我一开始想的是网络流,答案当然是增广次数, 但可以发现跑网络流的话不同的跑法增广次数不一样,不太好找最小的.我们可以换一种神奇的思路, ...

  9. linux 常用命令(个人记录)

    Linux专家的秘诀:思考-实践-在思考-再实践...linux常用命令:root 管理员用户startx 进入shutdown -h now 立刻关机shutdown -r now 现在重新启动计算 ...

  10. (树状数组+离散化)lines--hdu --5124

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 lines Time Limit: 5000/2500 MS (Java/Others)    Memor ...