flyio.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // @ts-ignore
  2. import Fly from "flyio/dist/npm/wx"
  3. import config from "@/config";
  4. import { useUserStore } from '@/store/userStore';
  5. const { serverBaseUrl } = config;
  6. const requestConfig = {
  7. baseURL: serverBaseUrl,
  8. timeout: 30000,
  9. headers: {
  10. "Content-Type": "application/json",
  11. },
  12. withCredentials: false,
  13. };
  14. const fly = new Fly();
  15. fly.config = requestConfig;
  16. const refreshFly = new Fly();
  17. refreshFly.config = requestConfig;
  18. const cleanParams = (obj: any) => {
  19. if (!obj || typeof obj !== 'object') return obj
  20. Object.keys(obj).forEach(k => {
  21. const v = obj[k]
  22. if (v === undefined || v === null) {
  23. delete obj[k]
  24. } else if (typeof v === 'object') {
  25. cleanParams(v)
  26. }
  27. })
  28. return obj
  29. }
  30. fly.interceptors.request.use((request: any) => {
  31. const userStore = useUserStore();
  32. const token = userStore.accessToken;
  33. if (request.headers['TempToken']) {
  34. request.headers['Authorization'] = `Bearer ${request.headers['TempToken']}`;
  35. } else if (token) {
  36. request.headers['Authorization'] = 'Bearer ' + token;
  37. }
  38. const examType = userStore.getExamType;
  39. const location = userStore.getLocation;
  40. if (examType) {
  41. request.headers['examType'] = examType;
  42. }
  43. if (location) {
  44. request.headers['location'] = encodeURIComponent(location);
  45. }
  46. if (request.params) {
  47. request.params = cleanParams(request.params)
  48. }
  49. if (request.body) {
  50. request.body = cleanParams(request.body)
  51. }
  52. return request;
  53. });
  54. fly.interceptors.response.use(
  55. function (this: { lock: () => void; unlock: () => void }, response: any) { // 不要使用箭头函数,否则调用this.lock时this指向不对
  56. const result = response.data;
  57. try {
  58. const { code, msg } = result;
  59. if (code === 401) {
  60. logout();
  61. return Promise.reject({ code: 401, msg: '未授权,请重新登录', result });
  62. } else {
  63. if (code !== 200) {
  64. uni.$ie.showToast(msg);
  65. return Promise.reject(result);
  66. } else {
  67. return Promise.resolve(result);
  68. }
  69. }
  70. } catch (err) {
  71. // 响应数据格式异常,reject 错误对象而不是 result
  72. return Promise.reject(err);
  73. }
  74. },
  75. function (err: Error, promise: Promise<any>) {
  76. return Promise.reject(err);
  77. }
  78. );
  79. function logout() {
  80. const userStore = useUserStore();
  81. userStore.logout();
  82. uni.reLaunch({
  83. url: '/pagesSystem/pages/login/login'
  84. });
  85. }
  86. export default fly;