http.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import configs from '@/configs/env';
  2. import { tokenList } from '@/configs/whitelist';
  3. import Constants from '@/configs/constant';
  4. import Http from '@/utils/Http/Http';
  5. import MD5 from '@/assets/scripts/md5';
  6. import store from '@/store';
  7. import { redirectToLogin } from '@/common/NavFuncs';
  8. // TOKEN request拦截器
  9. const add_token_to_request_interceptor = function (res) {
  10. const url = `${res.baseUrl}${res.url}`.replace(configs.baseUrl, '');
  11. let inWhitelist = false;
  12. for (let whiteUrl of tokenList) {
  13. if (url.indexOf(whiteUrl) > -1) {
  14. inWhitelist = true;
  15. return res;
  16. }
  17. }
  18. // in white list
  19. if (inWhitelist) {
  20. return res;
  21. }
  22. // not in white list
  23. // const token = uni.getStorageSync(Constants.TOKEN);
  24. const token = store.state.token;
  25. // console.log(`token: `, token);
  26. if (!token) {
  27. redirectToLogin();
  28. throw new Error('请登录');
  29. }
  30. const header = res.header || {};
  31. res.header = { 'Authorization': `Bearer ${token}`, ...header };
  32. return res;
  33. }
  34. // params加密拦截器
  35. const params_encryption_request_interceptor = function (res) {
  36. const url = `${res.baseUrl}${res.url}`.replace(configs.baseUrl, '');
  37. const { data } = res;
  38. const keys = [], values = [];
  39. if (data) {
  40. for (let key of Object.keys(data)) {
  41. keys.push(key);
  42. }
  43. keys.sort();
  44. keys.forEach(key => {
  45. let value = data[key];
  46. if (typeof value === 'string'
  47. || typeof value === 'number') {
  48. // do nothing
  49. } else if (typeof value === 'boolean') {
  50. value = `${value}`;
  51. } else {
  52. value = '';
  53. }
  54. values.push(value);
  55. });
  56. }
  57. const encryptList = [url, keys, values];
  58. const VALIDATE = MD5(JSON.stringify(encryptList));
  59. // console.log(`encrypt=${JSON.stringify(encryptList)}, MD5=${VALIDATE}`);
  60. const header = res.header || {};
  61. res.header = { VALIDATE, 'ifLogResponse': '1', ...header };
  62. return res;
  63. }
  64. // 基础响应成功拦截器
  65. const base_res_resolve_interceptor = function (res) {
  66. console.log(`http ok: `);
  67. if (res.data && !res.data.code) {
  68. if (res.data && res.data.message) {
  69. uni.showToast({
  70. title: res.data.message,
  71. icon:'none',
  72. position:'bottom'
  73. });
  74. }
  75. return Promise.reject(res)
  76. }
  77. return res.data;
  78. }
  79. // 基础响应拒绝拦截器
  80. const base_res_reject_interceptor = function (err) {
  81. console.log(`http error: `);
  82. if (err.data && err.data.message) {
  83. uni.showToast({
  84. title: err.data.message,
  85. icon: 'none',
  86. position:'bottom'
  87. });
  88. } else {
  89. let errMsg = err.message || '系统错误';
  90. if (err && err.errMsg) {
  91. if (err.errMsg.indexOf('fail timeout') > -1) {
  92. errMsg = '连接超时';
  93. } else if (err.errMsg === 'request:fail') {
  94. errMsg = '网络连接失败';
  95. }
  96. }
  97. uni.showToast({
  98. title: errMsg,
  99. icon: 'none',
  100. position:'bottom'
  101. });
  102. }
  103. return Promise.reject(err)
  104. }
  105. const apis = Object.keys(configs.apis).reduce((res, key) => {
  106. res[key] = new Http({
  107. baseUrl: `${configs.baseUrl}${configs.apis[key]}`
  108. });
  109. //res[key].interceptors.request.add(add_token_to_request_interceptor);
  110. //res[key].interceptors.request.add(params_encryption_request_interceptor);
  111. res[key].interceptors.response.add(base_res_resolve_interceptor, base_res_reject_interceptor);
  112. return res;
  113. }, {});
  114. export default apis;