运维小程序
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // api.jshttp://zlink.bjdexn.cn
  2. // const baseUrl = 'http://192.168.8.102:9999'; // 替换为您的接口基础 URL
  3. const esosUrl = 'https://esos-iot.com'; // 线上
  4. const baseUrl = 'https://esos-iot.com:8443'; // 线上
  5. // const baseUrl = 'http://192.168.8.105:8888'; // 替换为您的接口基础 URL
  6. //
  7. // 封装网络请求方法
  8. // isPublic: true 不检验token
  9. // useEsos: true 使用esosUrl地址
  10. function request(url, method, data, options = {}) {
  11. const { isPublic = false, useEsos = false } = options;
  12. return new Promise((resolve, reject) => {
  13. // 动态选择根地址
  14. const rootUrl = useEsos ? esosUrl : baseUrl;
  15. const header = {
  16. 'Content-Type': 'application/x-www-form-urlencoded'
  17. };
  18. // 非公共接口需携带 Token
  19. if (!isPublic) {
  20. const token = wx.getStorageSync('token');
  21. if (token) {
  22. header['Authorization'] = `Bearer ${token}`;
  23. } else {
  24. redirectToLogin('请先登录');
  25. reject({ code: 401, message: '未找到认证 Token' });
  26. return;
  27. }
  28. }
  29. wx.request({
  30. url: rootUrl + url,
  31. header,
  32. method,
  33. data,
  34. success: (res) => {
  35. console.log(res);
  36. // Token 失效或未授权
  37. if ([320, 400, 401, 403].includes(res.statusCode)) {
  38. handleTokenInvalid(res.data.msg || '登录已过期');
  39. reject(res.data);
  40. return;
  41. }
  42. // 请求成功但业务逻辑错误(如 code != 200)
  43. if (res.statusCode === 200||res.data.code==0) {
  44. res.data.code === 200||res.data.code === 0 ? resolve(res.data) : reject(res.data);
  45. } else {
  46. reject(res.data.msg || { code: res.statusCode, message: '请求异常' });
  47. }
  48. },
  49. fail: (err) => {
  50. console.error('请求失败:', err);
  51. wx.showToast({ title: '网络错误', icon: 'none' });
  52. reject(err);
  53. }
  54. });
  55. });
  56. }
  57. // 跳转到登录页
  58. function redirectToLogin(message = '') {
  59. wx.clearStorageSync();
  60. const pages = getCurrentPages();
  61. const currentRoute = pages[pages.length - 1]?.route || '';
  62. // 避免重复跳转
  63. if (!currentRoute.includes('pages/login/index')) {
  64. wx.showToast({ title: message, icon: 'none' });
  65. wx.reLaunch({ url: '/pages/login/index' });
  66. }
  67. }
  68. // 处理 Token 失效
  69. function handleTokenInvalid(message) {
  70. console.warn('Token 失效:', message);
  71. redirectToLogin(message || '请重新登录');
  72. }
  73. // 导出封装的请求方法
  74. module.exports = {
  75. request: request,
  76. baseUrl:baseUrl
  77. };