a0551d1997ce09d52df9209c69d77753f1fb18ba.svn-base 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*
  2. * @Description: In User Settings Edit
  3. * @Author: your name
  4. * @Date: 2019-08-26 10:58:23
  5. * @LastEditTime: 2019-08-26 11:51:19
  6. * @LastEditors: Please set LastEditors
  7. */
  8. import axios from 'axios' // 引入axios
  9. import qs from 'qs' // 序列化字符串
  10. import store from '../store/index' // 引入全局状态管理
  11. import router from '../router' // 路由
  12. import { Toast } from 'vant' // 控件
  13. // 环境切换
  14. if (process.env.NODE_ENV === 'development') {
  15. axios.defaults.baseURL = ''
  16. } else if (process.env.NODE_ENV === 'debug') {
  17. axios.defaults.baseURL = '测试环境'
  18. } else if (process.env.NODE_ENV === 'production') {
  19. axios.defaults.baseURL = '生产环境'
  20. }
  21. // 请求超时时间
  22. axios.defaults.timeout = 10000
  23. // 线上
  24. let Base = 'http://sports.bocai108.com'
  25. // 开发
  26. //let Base = 'http://sports.5gogo.com'
  27. function headerUrl (url) {
  28. url = Base + url
  29. return url
  30. }
  31. // post请求头
  32. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
  33. // request 请求拦截器
  34. axios.interceptors.request.use(
  35. config => {
  36. // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加
  37. // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
  38. // console.log(store);
  39. const token = store.state.token
  40. token && (config.headers.Authorization = token)
  41. return config
  42. },
  43. error => {
  44. return Promise.error(error)
  45. })
  46. // response 响应拦截器
  47. axios.interceptors.response.use(
  48. response => {
  49. if (response.status === 200) {
  50. return Promise.resolve(response)
  51. } else {
  52. return Promise.reject(response)
  53. }
  54. },
  55. // 服务状态码不是200的情况
  56. error => {
  57. console.log(error.response);
  58. if (error.response) {
  59. switch (error.response.status) {
  60. // 401 未登录
  61. // 未登录则跳转登录页面,并携带当前页面的路径
  62. // 在登录成功后返回当前页面,这一步需要在登录页操作。
  63. case 401:
  64. router.replace({
  65. path: '/login',
  66. query: {redirect: router.currentRoute.fullPath}
  67. })
  68. break
  69. // 403 token过期
  70. // 登录过期对用户进行提示
  71. // 清除本地token和清空vuex中token对象
  72. // 跳转登录页面
  73. case 403:
  74. Toast({
  75. message: '登录过期,请重新登录',
  76. duration: 1000,
  77. forbidClick: true
  78. })
  79. localStorage.removeItem('token')
  80. store.commit('loginSuccess', null)
  81. // 跳转登录页面,并将要浏览的页面fullpath传过去,登录成功后跳转到要访问的页面
  82. setTimeout(() => {
  83. router.replace({
  84. path: '/login',
  85. query: {
  86. redirect: router.currentRoute.fullPath
  87. }
  88. })
  89. }, 1000)
  90. break
  91. // 404 请求不存在
  92. case 404:
  93. Toast({
  94. message: '网络请求不存在',
  95. duration: 1500,
  96. forbidClick: true
  97. })
  98. break
  99. // 其他错误直接抛出错误提示
  100. default:
  101. Toast({
  102. message: error.response.data.message,
  103. duration: 1500,
  104. forbidClick: true
  105. })
  106. }
  107. return Promise.reject(error.response)
  108. }
  109. }
  110. )
  111. export default {
  112. /**
  113. * get方法对应get请求
  114. * @param {String}url 请求地址
  115. * @param {Object}params 携带参数
  116. * @returns {Promise}
  117. */
  118. get (url, params) {
  119. return new Promise((resolve, reject) => {
  120. axios.get(headerUrl(url), {
  121. params
  122. })
  123. .then(res => {
  124. resolve(res)
  125. })
  126. .catch(err => {
  127. reject(err)
  128. })
  129. })
  130. },
  131. /**
  132. * post方法对应post请求
  133. * @param {String} url 请求地址
  134. * @param {Object} params 携带参数
  135. * @returns {Promise}
  136. */
  137. post (url, params) {
  138. return new Promise((resolve, reject) => {
  139. axios.post(headerUrl(url), qs.stringify(params))
  140. .then(res => {
  141. resolve(res)
  142. })
  143. .catch(err => {
  144. reject(err)
  145. })
  146. })
  147. }
  148. }