request.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const BASE_URL = 'https://your-api-domain.com';
  2. let isRedirectingToLogin = false;
  3. function getToken() {
  4. return uni.getStorageSync('token') || '';
  5. }
  6. function redirectToLogin() {
  7. if (isRedirectingToLogin) return;
  8. isRedirectingToLogin = true;
  9. uni.showToast({ title: '登录已失效,请重新登录', icon: 'none', duration: 1500 });
  10. setTimeout(() => {
  11. isRedirectingToLogin = false;
  12. uni.reLaunch({ url: '/pages/login/login' });
  13. }, 1500);
  14. }
  15. function request(options = {}) {
  16. const { url, method = 'GET', data = {}, header = {} } = options;
  17. const token = getToken();
  18. const headers = {
  19. 'Content-Type': 'application/json',
  20. ...(token ? { Authorization: 'Bearer ' + token } : {}),
  21. ...header
  22. };
  23. return new Promise((resolve, reject) => {
  24. uni.request({
  25. url: BASE_URL + url,
  26. method,
  27. data,
  28. header: headers,
  29. success(res) {
  30. const { code, msg, data, total, rows } = res.data;
  31. if (code === 200) {
  32. const result = {};
  33. if (data !== undefined) result.data = data;
  34. if (total !== undefined) result.total = total;
  35. if (rows !== undefined) result.rows = rows;
  36. resolve(result);
  37. } else if (code === 401) {
  38. redirectToLogin();
  39. reject(new Error('登录已失效'));
  40. } else if (code === 500) {
  41. reject(new Error(msg));
  42. } else {
  43. reject(new Error(msg || '请求失败'));
  44. }
  45. },
  46. fail(err) {
  47. const message = err.errMsg || '网络请求失败';
  48. uni.showToast({ title: message, icon: 'none' });
  49. reject(new Error(message));
  50. }
  51. });
  52. });
  53. }
  54. export default request;