当前位置:   article > 正文

axios拦截器_axios拦截econnaborted

axios拦截econnaborted

 

 

什么是拦截器

拦截器就是拦截每一次的请求和响应,然后进行相应的处理。请求拦截器,它可以统一在你发送请求前在请求体里加上token;响应拦截器,是在接受到响应之后进行的一些操作,比如,服务器返回登录状态失效,需要重新登录的时候,就给它跳到登录页面;

代码没有相同的 但是思路都是一样

思路 思路 思路。。。重要的事情说三遍!!! 

创建实例

  1. axios.create({
  2. baseURL:'http://localhost:8080', //请求的域名,基本地址
  3. timeout:5000, //请求的超时时长,单位毫秒
  4. url:'/data.json', //请求的路径
  5. method:'get,post,put,patch,delete' , //请求方法
  6. headers:{
  7. token:'' //比如token登录鉴权,请求的时候携带token,让后端识别登录人的信息
  8. }, //请求头
  9. params:{}, //请求参数拼接在URL上
  10. data:{}, //请求参数放在请求体里
  11. })

 优先级:axios请求配置 > axios实例配置 > axios全局配置
实际开发中axios全局配置一般比较少用到,因为它的局限性比较大,一般只能设置baseURL,timeout,url,其他的method,headers,params,data这些请求都是不一样的

request拦截器

  1. // request拦截器
  2. service.interceptors.request.use(config => {
  3. // 如果是put/post请求,用qs.stringify序列化参数
  4. const methodType = config.method === 'put' || config.method === 'post'
  5. const _headers = config.headers['Content-Type'] === 'application/json'
  6. if (methodType && _headers ) {
  7. config.data = JSON.stringify(config.data)
  8. }
  9. if (methodType && !_headers ) {
  10. config.data = qs.stringify(config.data, { arrayFormat: 'repeat' })
  11. }
  12. // 在请求被发送之前做的事
  13. // 可以添加一些加载 动画。。。或者根据业务需求进行
  14. /** 配置全屏加载 */
  15. if (config.loading !== false) {
  16. config.loading = Loading.service({
  17. lock: true,
  18. background: 'rgba(0, 0, 0, 0.7)',
  19. spinner: 'el-icon-loading',
  20. text: '请稍候...'
  21. })
  22. }

response响应

  1. service.interceptors.response.use(
  2. /** 响应成功发生的
  3. * 也可以直接response.status===200判断
  4. */
  5. async response => {
  6. await closeLoading(response)
  7. return response.data
  8. },
  9. // 服务器状态码不是2开头的的情况
  10. // 这里可以跟你们的后台开发人员协商好统一的错误状态码
  11. // 然后根据返回的状态码进行一些操作,例如登录过期提示,错误提示等等
  12. // 下面列举几个常见的操作,其他需求可自行扩展
  13. async error => {
  14. await closeLoading(error)
  15. const error_response = error.response || {}
  16. const error_data = error_response.data || {}
  17. // 401: 未登录
  18. // 未登录则跳转登录页面,并携带当前页面的路径
  19. // 在登录成功后返回当前页面,这一步需要在登录页操作。
  20. if(error_response.status === 401) {
  21. Vue.prototype.$message.error('身份验证失败,请关闭重新进入。')
  22. }
  23. // 403 token过期
  24. // 登录过期对用户进行提示
  25. // 清除本地token和清空vuex中token对象
  26. // 跳转登录页面
  27. if (error_response.status === 403) {
  28. if (!Storage.getItem('admin_refresh_token')) return
  29. store.dispatch('fedLogoutAction')
  30. router.push({ path: `/login?forward=${location.pathname}` })
  31. return
  32. }
  33. // 404请求不存在
  34. if(error_response.status === 404) {
  35. Vue.prototype.$message.error('您访问的网页不存在。')
  36. }
  37. if (error.config.message !== false) {
  38. let _message = error.code === 'ECONNABORTED' ? '连接超时,请稍候再试!' : '网络错误,请稍后再试!'
  39. Vue.prototype.$message.error(error_data.message || _message)
  40. }
  41. return Promise.reject(error)
  42. }
  43. )
  44. /**
  45. * 关闭全局加载
  46. * 延迟200毫秒关闭,造成不好的视觉体验
  47. * @param target
  48. */
  49. const closeLoading = (target) => {
  50. if (!target.config.loading) return true
  51. return new Promise((resolve, reject) => {
  52. setTimeout(() => {
  53. target.config.loading.close()
  54. resolve()
  55. }, 200)
  56. })
  57. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/529701
推荐阅读
相关标签
  

闽ICP备14008679号