request.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import config from '@/config.js'; // 引入配置文件
  2. import store from '@/store'
  3. let apiBaseUrl = '';
  4. // console.log(process.env.NODE_ENV)
  5. if (process.env.NODE_ENV === 'development') {//本地开发环境
  6. const SYSTEM_INFO = uni.getSystemInfoSync();//获取系统信息的同步接口
  7. apiBaseUrl = SYSTEM_INFO.uniPlatform === 'web' ? config.proxyBaseUrl:config.apiBaseUrl;//读取配置文件的apiBaseUrl变量
  8. } else {//生产/测试环境
  9. apiBaseUrl = config.apiBaseUrl
  10. }
  11. console.log(process.env.NODE_ENV,apiBaseUrl)
  12. const request = (options) => {
  13. if(options.url.endsWith('.js')) return;
  14. // console.log("进入requset",options);
  15. return new Promise((resolve, reject) => {
  16. // console.log("进入Promise",options);
  17. let contentType = 'application/json';//默认请求头content-type
  18. // 根据请求方法和请求数据类型设置请求头content-type 以下方法在安卓里报错
  19. // if (options.method === 'POST' && options.data instanceof FormData)
  20. // {
  21. // // FormData 请求头content-type
  22. // contentType = 'multipart/form-data';
  23. // } else if (options.method === 'POST' && typeof options.data === 'string')
  24. // {
  25. // // 字符串请求头content-type
  26. // contentType = 'application/x-www-form-urlencoded';
  27. // }
  28. // console.log("准备请求");
  29. uni.request({
  30. url: apiBaseUrl + options.url,
  31. method: options.method || 'GET',
  32. data: options.data || {},
  33. header: {
  34. 'content-type': contentType,
  35. ...(options.header || {})
  36. },
  37. success: (res) => {
  38. if (res.statusCode === 200) {
  39. resolve(res);
  40. } else {
  41. reject(res);
  42. }
  43. },
  44. fail: (err) => {
  45. reject(err);
  46. }
  47. });
  48. });
  49. };
  50. // 请求拦截器
  51. const requestInterceptor = (config) => {
  52. // 在发送请求之前做些什么
  53. const token = uni.getStorageSync('token'); // 假设从本地存储获取token
  54. // 确保 options.header 存在
  55. if (!config.header) {
  56. config.header = {};
  57. }
  58. if (token) {
  59. config.header.Authorization = `${token}`; // 添加token请求头
  60. }
  61. return config;
  62. };
  63. // 响应拦截器
  64. const responseInterceptor = (response) => {
  65. // console.log("响应拦截器response",response);
  66. // 对响应数据做点什么
  67. switch (response.data.code) {//response.statusCode
  68. case 200:
  69. return response.data;
  70. case 400:
  71. return response.data;
  72. case 601:
  73. return response.data;
  74. case 602:
  75. return response.data;
  76. case 401:
  77. store.dispatch('logout',true);
  78. uni.redirectTo({
  79. url: '/pages/login/index'
  80. });
  81. throw new Error(response.data.message || '未授权,请重新登录');
  82. case 403:
  83. throw new Error(response.data.message || '禁止访问');
  84. case 404:
  85. throw new Error(response.data.message || '资源未找到');
  86. case 500:
  87. return response.data;
  88. // throw new Error(response.data.message || '服务器内部错误');
  89. default:
  90. throw new Error(`未知错误,状态码: ${response.statusCode}`);
  91. }
  92. };
  93. const requestWithInterceptors = (options) => {
  94. // console.log("进来了",options);
  95. const config = requestInterceptor(options);
  96. // console.log("进来了",config);
  97. return request(config).then(responseInterceptor);
  98. };
  99. // 封装常用的请求方法
  100. const get = (url, data, header) => {
  101. return requestWithInterceptors({ url, data, header, method: 'GET' });
  102. };
  103. const post = (url, data, header) => {
  104. return requestWithInterceptors({ url, data, header, method: 'POST' });
  105. };
  106. const put = (url, data, header) => {
  107. return requestWithInterceptors({ url, data, header, method: 'PUT' });
  108. };
  109. const del = (url, data, header) => {
  110. return requestWithInterceptors({ url, data, header, method: 'DELETE' });
  111. };
  112. export default {
  113. request,
  114. get,
  115. post,
  116. put,
  117. del
  118. };