http.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import {wxToPromise} from "./wx";
  2. import config from "../model/config";
  3. import Route from "../model/route";
  4. import User from "../model/user";
  5. import {showLoading, toast} from "./utils";
  6. import storage from "./storage";
  7. const app = getApp();
  8. class Http {
  9. //T 可以通过重写errorHandler来覆盖默认的网络错误处理
  10. static async request({url, data, method = 'get', opt = {isLoading: false}},
  11. errorHandler = async (code, msg) => {
  12. if (code == 401) {
  13. await User.logout();
  14. Route.redirectLogin();
  15. }
  16. const title = Http._showError(code, msg)
  17. throw new Error(title)
  18. }) {
  19. const isLoading = opt.isLoading;
  20. if (isLoading) {
  21. showLoading();
  22. }
  23. let res
  24. try {
  25. let tokenObj = {};
  26. if (app.globalData.token) {
  27. tokenObj.Authorization = app.globalData.token;
  28. }
  29. res = await wxToPromise('request', {
  30. url: `${config.API}${url}`,
  31. data,
  32. method,
  33. header: {
  34. 'content-type': 'application/json',
  35. ...tokenObj
  36. }
  37. })
  38. } catch (e) {
  39. console.log('网络错误', e);
  40. // 代码逻辑异常、无网络、请求超时会走这里
  41. await errorHandler(-100)
  42. }
  43. if (isLoading) {
  44. wx.hideLoading()
  45. }
  46. if (res.statusCode == 200) {
  47. if (res.data.code == 200) {
  48. console.log(`网络请求${url}`, data, res.data);
  49. return res.data;
  50. }else {
  51. await errorHandler(res.data.code, res.data.msg, res.data.data);
  52. }
  53. } else {
  54. await errorHandler(res.statusCode)
  55. }
  56. }
  57. static _showError(errorCode, message = '') {
  58. const errorMessage = config.ERROR_MSG[errorCode];
  59. const title = errorMessage || message || '未知异常'
  60. console.log("错误提示", title)
  61. wx.showToast({
  62. title,
  63. icon: 'none',
  64. duration: 3000
  65. })
  66. return title;
  67. }
  68. }
  69. export default Http