service.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. const getTokenStorage = () => {
  7. let token = "";
  8. try {
  9. token = uni.getStorageSync(ACCESS_TOKEN);
  10. } catch (e) {
  11. //TODO handle the exception
  12. console.log("getTokenStorage", token);
  13. }
  14. return token;
  15. };
  16. const http = new Request();
  17. http.setConfig((config) => {
  18. /* 设置全局配置 */
  19. config.baseUrl = configService.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. /* 请求之前拦截器 */
  36. console.log(config, "config---");
  37. config.baseUrl = configService.apiUrl || uni.getStorageSync("apiUrl") || "";
  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. return config;
  48. });
  49. // 必须使用异步函数,注意
  50. var that = this;
  51. http.interceptor.response(
  52. async (response) => {
  53. /* 请求之后拦截器 */
  54. // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
  55. // return Promise.reject(response)
  56. // }
  57. return response;
  58. },
  59. (response) => {
  60. // 请求错误做点什么
  61. console.log("请求错误做点什么", response);
  62. if (response) {
  63. let data = response.data;
  64. const token = uni.getStorageSync(ACCESS_TOKEN);
  65. console.log("------异常响应------", token);
  66. console.log("------异常响应------", data.code);
  67. switch (data.code) {
  68. case 403:
  69. tip.error("拒绝访问");
  70. break;
  71. case 500:
  72. if (!token || data.message == "Token失效,请重新登录") {
  73. let timeout = setTimeout(tip.alert("登录已过期"), 1000);
  74. store.dispatch("Logout").then(() => {
  75. clearTimeout(timeout);
  76. window.location.reload();
  77. });
  78. }
  79. break;
  80. case 404:
  81. break;
  82. case 504:
  83. break;
  84. case 401:
  85. console.log("------异常响应-401-----", 401);
  86. console.log("------uni-----", uni);
  87. uni.navigateTo({
  88. url: "/pages/login/login",
  89. });
  90. return;
  91. if (token) {
  92. /* store.dispatch('Logout').then(() => {
  93. setTimeout(() => {
  94. window.location.reload()
  95. }, 1500)
  96. }) */
  97. }
  98. break;
  99. default:
  100. tip.error({
  101. duration: 0,
  102. forbidClick: true,
  103. message: data.message,
  104. });
  105. break;
  106. }
  107. }
  108. return response;
  109. }
  110. );
  111. export { http };