service.js 3.2 KB

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