service.js 3.4 KB

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