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. /* 设置全局配置 */
  20. config.baseUrl = apiUrl; /* 根域名不同 */
  21. config.header = {
  22. ...config.header,
  23. };
  24. return config;
  25. });
  26. /**
  27. * 自定义验证器,如果返回true 则进入响应拦截器的响应成功函数(resolve),否则进入响应拦截器的响应错误函数(reject)
  28. * @param { Number } statusCode - 请求响应体statusCode(只读)
  29. * @return { Boolean } 如果为true,则 resolve, 否则 reject
  30. */
  31. // 有默认,非必写
  32. http.validateStatus = (statusCode) => {
  33. return statusCode === 200;
  34. };
  35. http.interceptor.request((config, cancel) => {
  36. /* 请求之前拦截器 */
  37. console.log(config, "config---");
  38. config.baseUrl = "";
  39. if (apiUrl) {
  40. config.baseUrl = apiUrl; /* 根域名不同 */
  41. } else {
  42. config.url = uni.getStorageSync("apiUrl") + config.url;
  43. }
  44. config.header = {
  45. ...config.header,
  46. "X-Access-Token": getTokenStorage(),
  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(
  58. async (response) => {
  59. /* 请求之后拦截器 */
  60. // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
  61. // return Promise.reject(response)
  62. // }
  63. return response;
  64. },
  65. (response) => {
  66. // 请求错误做点什么
  67. console.log("请求错误做点什么", response);
  68. if (response) {
  69. let data = response.data;
  70. const token = uni.getStorageSync(ACCESS_TOKEN);
  71. console.log("------异常响应------", token);
  72. console.log("------异常响应------", data.code);
  73. switch (data.code) {
  74. case 403:
  75. tip.error("拒绝访问");
  76. break;
  77. case 500:
  78. if (!token || data.message == "Token失效,请重新登录") {
  79. let timeout = setTimeout(tip.alert("登录已过期"), 1000);
  80. store.dispatch("Logout").then(() => {
  81. clearTimeout(timeout);
  82. window.location.reload();
  83. });
  84. }
  85. break;
  86. case 404:
  87. break;
  88. case 504:
  89. break;
  90. case 401:
  91. console.log("------异常响应-401-----", 401);
  92. console.log("------uni-----", uni);
  93. uni.navigateTo({
  94. url: "/pages/login/login",
  95. });
  96. return;
  97. if (token) {
  98. /* store.dispatch('Logout').then(() => {
  99. setTimeout(() => {
  100. window.location.reload()
  101. }, 1500)
  102. }) */
  103. }
  104. break;
  105. default:
  106. tip.error({
  107. duration: 0,
  108. forbidClick: true,
  109. message: data.message,
  110. });
  111. break;
  112. }
  113. }
  114. return response;
  115. }
  116. );
  117. export { http };