requestInterceptors.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import env from "@/config.js"
  2. import {useUserStore} from "@/hooks/useUserStore";
  3. import {useEnvStore} from "@/hooks/useEnvStore"
  4. /**
  5. * 请求拦截
  6. * @param {Object} http
  7. */
  8. export const requestInterceptors = (vm) => {
  9. uni.$uv.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
  10. const {token, isAgreeProtocol} = useUserStore()
  11. // 'NoToken' url 自动适配
  12. if (config.custom?.autoFitNoToken && (!token.value || config.custom?.withoutToken)) {
  13. config.url = config.url + 'NoToken'
  14. }
  15. // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
  16. config.data = config.data || {}
  17. config.header = config.header || {}
  18. // 补充header信息
  19. config.header['X-Requested-With'] = 'XMLHttpRequest';
  20. config.header['type'] = env.identifier
  21. if (isAgreeProtocol.value) {
  22. // NOTE: 这里在明确用户同意协议后才访问系统信息,否则有可能提前出现权限询问,导致平台审核被拒!
  23. const {systemInfo} = useEnvStore()
  24. for (const [key, value] of Object.entries(systemInfo.value)) {
  25. config.header[key] = value
  26. }
  27. }
  28. // 可以在此通过vm引用vuex中的变量,具体值在store.state中
  29. if (!config.custom?.withoutToken && token.value) {
  30. config.header['Authorization'] = `Bearer ${token.value}`
  31. }
  32. return config
  33. }, (config) => // 可使用async await 做异步操作
  34. Promise.reject(config))
  35. }