service.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import Request from '@/common/luch-request/index.js'
  2. import {ACCESS_TOKEN} from '@/common/util/constants.js'
  3. import configService from './config.service.js'
  4. import tip from '@/common/util/tip.js';
  5. import store from '@/store/index.js';
  6. let apiUrl = configService.apiUrl;
  7. const getTokenStorage = () => {
  8. let token = ''
  9. try{
  10. token =store.getters.token
  11. /* uni.getStorageSync(ACCESS_TOKEN) */
  12. }catch(e){
  13. //TODO handle the exception
  14. console.log("getTokenStorage",token)
  15. }
  16. console.log(token,+"sss")
  17. return token
  18. }
  19. const http = new Request()
  20. http.setConfig((config) => { /* 设置全局配置 */
  21. config.baseUrl = apiUrl /* 根域名不同 */
  22. config.header = {
  23. ...config.header
  24. }
  25. return config
  26. })
  27. /**
  28. * 自定义验证器,如果返回true 则进入响应拦截器的响应成功函数(resolve),否则进入响应拦截器的响应错误函数(reject)
  29. * @param { Number } statusCode - 请求响应体statusCode(只读)
  30. * @return { Boolean } 如果为true,则 resolve, 否则 reject
  31. */
  32. // 有默认,非必写
  33. http.validateStatus = (statusCode) => {
  34. return statusCode === 200
  35. }
  36. http.interceptor.request((config, cancel) => { /* 请求之前拦截器 */
  37. /* tip.alert(config.baseUrl) */
  38. config.header = {
  39. ...config.header,
  40. 'X-Access-Token':getTokenStorage()
  41. }
  42. /*
  43. if (!token) { // 如果token不存在,调用cancel 会取消本次请求,但是该函数的catch() 仍会执行
  44. cancel('token 不存在') // 接收一个参数,会传给catch((err) => {}) err.errMsg === 'token 不存在'
  45. }
  46. */
  47. console.log(config);
  48. return config
  49. })
  50. // 必须使用异步函数,注意
  51. http.interceptor.response(async (response) => { /* 请求之后拦截器 */
  52. // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
  53. // return Promise.reject(response)
  54. // }
  55. return response
  56. }, (response) => {
  57. // 请求错误做点什么
  58. console.log("请求错误做点什么",response);
  59. if (response) {
  60. let data = response.data
  61. const token = store.getters.token
  62. //uni.getStorageSync(ACCESS_TOKEN)
  63. console.log("------异常响应------",token)
  64. console.log("------异常响应------",data.status)
  65. switch (data.status) {
  66. case 403:
  67. tip.error('拒绝访问');
  68. break
  69. case 500:
  70. if(!token || data.message=="Token失效,请重新登录"){
  71. let timeout=setTimeout(tip.alert('登录已过期'), 1000);
  72. uni.navigateTo({
  73. url:'/pages/login/login'
  74. })
  75. /* store.dispatch('Logout').then(() => {
  76. clearTimeout(timeout)
  77. uni.navigateTo({
  78. url:'/pages/login/login'
  79. })
  80. }) */
  81. }if(data.message=="该账号已在其它地方登录!"){
  82. store.dispatch('Logout').then(() => {
  83. clearTimeout(timeout)
  84. window.location.reload()
  85. })
  86. }
  87. break
  88. case 404:
  89. break
  90. case 504:
  91. break
  92. case 401:
  93. if (token) {
  94. /* store.dispatch('Logout').then(() => {
  95. setTimeout(() => {
  96. window.location.reload()
  97. }, 1500)
  98. }) */
  99. }
  100. break
  101. default:
  102. tip.error({
  103. duration: 0,
  104. forbidClick: true,
  105. message: data.message
  106. });
  107. break
  108. }
  109. }
  110. return response
  111. })
  112. export {
  113. http
  114. }