service.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. //判断是否请求白名单,设置带不带token
  36. /* let url= config.url;
  37. if(url!="/ibps/business/v3/mobile/sys/mLogin"
  38. ||url!="ibps/oauth2/v3/authorize/apply"
  39. ||url!="ibps/oauth2/v3/authentication/apply"
  40. if(url=="/ibps/business/v3/mobile/sys/mLogin"
  41. ||url=="ibps/oauth2/v3/authorize/apply"
  42. ||url=="ibps/oauth2/v3/authentication/apply"
  43. ){
  44. return config;
  45. } */
  46. /* config.header = {
  47. ...config.header,
  48. 'X-Authorization-access_token':getTokenStorage()
  49. } */
  50. /*
  51. if (!token) { // 如果token不存在,调用cancel 会取消本次请求,但是该函数的catch() 仍会执行
  52. cancel('token 不存在') // 接收一个参数,会传给catch((err) => {}) err.errMsg === 'token 不存在'
  53. }
  54. */
  55. return config
  56. })
  57. // 必须使用异步函数,注意
  58. http.interceptor.response(async (response) => { /* 请求之后拦截器 */
  59. // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
  60. // return Promise.reject(response)
  61. // }
  62. /* if (response.data.data.state !== 50002) { // 服务端返回的状态码不等于200,则reject()
  63. console.log("服务不可用")
  64. return Promise.reject(response)
  65. }
  66. if (response.data.data.state !== 200) { // 服务端返回的状态码不等于200,则reject()
  67. return Promise.reject(response)
  68. } */
  69. // console.log(response)
  70. return response
  71. }, (response) => {
  72. // 请求错误做点什么
  73. console.log("请求错误做点什么");
  74. let index=JSON.stringify(response).toString().indexOf("request:fail");
  75. if(index==11){
  76. tip.alert("网络错误!")
  77. return;
  78. }
  79. if (response) {
  80. let data = response.data
  81. const token = uni.getStorageSync(ACCESS_TOKEN)
  82. console.log("------异常响应------",token)
  83. // console.log(data.state==undefined)
  84. // console.log("------异常响应------",data.state)
  85. switch (data.state) {
  86. case 50002:
  87. tip.error('服务不可用');
  88. break
  89. case 6020301:
  90. if(!token || data.message=="Token失效,请重新登录"){
  91. let timeout=setTimeout(tip.alert('登录已过期'), 1000);
  92. store.dispatch('Logout').then(() => {
  93. clearTimeout(timeout)
  94. window.location.reload()
  95. })
  96. }
  97. break
  98. case 404:
  99. break
  100. case 504:
  101. break
  102. case 401:
  103. if (token) {
  104. /* store.dispatch('Logout').then(() => {
  105. setTimeout(() => {
  106. window.location.reload()
  107. }, 1500)
  108. }) */
  109. }
  110. break
  111. default:
  112. tip.error({
  113. duration: 0,
  114. forbidClick: true,
  115. message: data.cause
  116. });
  117. break
  118. }
  119. }
  120. return response
  121. })
  122. export {
  123. http
  124. }