request.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. // import { getToken, removeToken } from "./auth.js";
  2. import $config from "@/config/index.js";
  3. const http = uni.$u.http;
  4. const errorCode = {
  5. '401': '认证失败,无法访问系统资源',
  6. '403': '当前操作没有权限',
  7. '404': '访问资源不存在',
  8. 'default': '系统未知错误,请反馈给管理员'
  9. }
  10. const showToast = (text) => {
  11. uni.hideToast()
  12. uni.showToast({
  13. title: text,
  14. icon: 'none'
  15. })
  16. }
  17. let goLogin = false;
  18. const login_path = 'pages/login/index'
  19. const onLogin = (msg) => {
  20. if (goLogin) return;
  21. goLogin = true
  22. const pages = getCurrentPages();
  23. const route = pages[pages.length - 1].route;
  24. if (!route || route !== login_path) {
  25. try {
  26. // if (getToken()) {
  27. // showToast(msg);
  28. // }
  29. // removeToken();
  30. setTimeout(() => {
  31. uni.reLaunch({
  32. url: `/${login_path}`,
  33. complete: () => {
  34. goLogin = false;
  35. }
  36. })
  37. }, 500)
  38. } catch (e) {
  39. //TODO handle the exception
  40. goLogin = false;
  41. }
  42. } else {
  43. goLogin = false;
  44. };
  45. }
  46. // console.log("$config = ", $config)
  47. http.setConfig((config) => {
  48. /* config 为默认全局配置*/
  49. config.baseURL = $config.baseURL; /* 根域名 */
  50. // 超时
  51. config.timeout = 10000;
  52. // config.headers = {
  53. // 'Content-Type': 'application/json;charset=utf-8',
  54. // 'Content-Language': 'zh_CN'
  55. // }
  56. // if (config.isToken == false) {
  57. // } else {
  58. // config.header['apiToken'] = getToken();
  59. // }
  60. /* 请求之前拦截器 */
  61. // config.header['client'] = 'applet';
  62. config.header['client'] = 'app';
  63. // 单商户
  64. // config.header['merchant-id'] = uni.getStorageSync('merchantId') || 1;
  65. // return config;
  66. // console.log("config = ", config)
  67. return config
  68. })
  69. // 请求拦截
  70. http.interceptors.request.use((config) => { // 可使用async await 做异步操作
  71. // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
  72. // 是否需要设置 token
  73. // console.log("interceptors = ", config)
  74. // const isToken = (config.headers || {}).isToken === false
  75. // if (getToken()) {
  76. // config.header['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  77. // // config.header['apiToken'] = getToken();
  78. // }
  79. // config.data = config.data || {}
  80. // 根据custom参数中配置的是否需要token,添加对应的请求头
  81. // if (config?.custom?.auth) {
  82. // // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中
  83. // config.header.token = vm.$store.state.userInfo.token
  84. // }
  85. return config
  86. // return false
  87. }, config => { // 可使用async await 做异步操作
  88. return Promise.reject(config)
  89. })
  90. // 响应拦截
  91. http.interceptors.response.use((res) => {
  92. // console.log("res = ", res)
  93. /* 对响应成功做点什么 可使用async await 做异步操作*/
  94. // 未设置状态码则默认成功状态
  95. const code = res.data.code || 200;
  96. // 获取错误信息
  97. const msg = errorCode[code] || res.data.msg || errorCode['default']
  98. const { data } = res.data
  99. // console.log("msg =============== ", res)
  100. // console.log("data res= ", res)
  101. if (code === 401) {
  102. onLogin("登录状态已过期")
  103. return Promise.reject()
  104. } else if (code === 500) {
  105. showToast(msg)
  106. return Promise.reject(new Error(msg))
  107. } else if (code === 50001) {
  108. return Promise.reject(res.data)
  109. } else if (code !== 200) {
  110. showToast(msg)
  111. return Promise.reject('error')
  112. } else {
  113. return data || data === false ? data : res.data
  114. }
  115. // 二进制数据则直接返回
  116. // if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
  117. // return res.data
  118. // } else {
  119. // }
  120. }, (response) => {
  121. // console.log("msg ======111111111111========= ", response.data)
  122. const res = response.data || {};
  123. let { message } = response;
  124. if (res?.msg) {
  125. message = res.msg;
  126. } else if (message == "Network Error") {
  127. message = "后端接口连接异常";
  128. } else if (message.includes("timeout")) {
  129. message = "系统接口请求超时";
  130. } else if (message.includes("Request failed with status code")) {
  131. message = "系统接口" + message.substr(message.length - 3) + "异常";
  132. }
  133. showToast(message)
  134. console.log('err' + response)
  135. // 对响应错误做点什么 (statusCode !== 200)
  136. return Promise.reject(response)
  137. })
  138. export default http