介绍

axios是一款异步请求组件,支持常用的请求方式,自动的组装请求数据,

尤其和vue使用的时候会更加有优势,

全局拦截器

将axios绑定到Vue实例中,可以在全局使用,

  1. // 全局拦截器 在请求的时候添加加载动作,也可以通过store中的变量控制不同的情况情况触发不同的加载动作。
  2. import axios from 'axios'
  3. import {REST_API} from '../config'
  4. import {Message} from 'iview'
  5. import store from '../store';
  6. axios.defaults.timeout = 60000
  7. axios.defaults.baseURL = REST_API
  8. axios.defaults.showSpin = true //请求加载loading效果
  9. axios.defaults.showMsg = false //请求后是否弹出消息
  10. // Add a request interceptor
  11. axios.interceptors.request.use(function (config) {
  12. // config.headers['Authorization'] = 'Bearer '+store.getters.token
  13. if(store.getters.check){
  14. console.log("lalalla",)
  15. store.state.app.checkShow = true;
  16. }
  17. else if(config.showSpin) {
  18. document.querySelector('#global-spin').style.display = 'block'
  19. }
  20. return config;
  21. }, function (error) {
  22. console.log('>>> 发送失败。', error)
  23. document.querySelector('#global-spin').style.display = 'none'
  24. store.state.app.checkShow = false;
  25. return Promise.reject(error);
  26. })
  27. // Add a response interceptor
  28. axios.interceptors.response.use(function (response) {
  29. document.querySelector('#global-spin').style.display = 'none'
  30. store.state.app.checkShow = false;
  31. store.state.app.check = false
  32. return check(response)
  33. }, function (error) {
  34. check(error.response)
  35. console.log('>>> 返回失败。', error.response)
  36. document.querySelector('#global-spin').style.display = 'none'
  37. store.state.app.checkShow = false;
  38. store.state.app.check = false
  39. return Promise.reject(error);
  40. })
  41. // 实例拦截器
  42. let instance = axios.create()
  43. instance中添加拦截器,实例中的拦截器不会触发全局的拦截器;

异步请求

Promise

  1. return new Promise(function (reslove, reject) {
  2. if (displayDate === 'none') {
  3. if (type === 'a') {
  4. facade.queryTop15In().then((res) => {
  5. if (res.status === 200) {
  6. reslove(res.data)
  7. // console.log("displayDate 先执行")
  8. }
  9. })
  10. } else if (type === 'b') {
  11. facade.queryTop15Out().then((res) => {
  12. if (res.status === 200) {
  13. reslove(res.data)
  14. // this.setState({
  15. // top15Data:res.data
  16. // })
  17. }
  18. })
  19. }
  20. } else {
  21. console.log("top15Data 执行这里?")
  22. this.state.top15Data = [],
  23. this.setState({
  24. top15Data: [],
  25. })
  26. }
  27. })

前后台分离的重定向

https://blog.csdn.net/li_gameover/article/details/79917473

整体思路: 在后台设置filter,进行校验token,
如果没有检验通过,设置响应头,在响应头添加一个字段,表明事重定向,
前台 使用拦截器,可以进行统一的拦截解析,进行重新路由