httpModel.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import axios from "axios";
  2. import qs from "qs";
  3. import { AsyncStorage } from "react-native";
  4. export default {
  5. state: {
  6. baseUrl: "http://dingdong.izouma.com",
  7. // baseUrl: "http://localhost:8080",
  8. token: "",
  9. config: {},
  10. httpLoading: false,
  11. },
  12. actions: ({ model, setState }) => ({
  13. getAxiosInstance() {
  14. const {
  15. baseUrl,
  16. setConfig,
  17. setConfigError,
  18. successEvent,
  19. errorEvent,
  20. } = model();
  21. const axiosInstance = axios.create({
  22. baseURL: baseUrl,
  23. });
  24. axiosInstance.interceptors.request.use(
  25. config => setConfig(config),
  26. error => setConfigError(error)
  27. );
  28. axiosInstance.interceptors.response.use(
  29. response => successEvent(response),
  30. error => errorEvent(error)
  31. );
  32. return axiosInstance;
  33. },
  34. async setConfig(config) {
  35. setState({ httpLoading: true });
  36. config.headers = config.headers || {};
  37. let token = await AsyncStorage.getItem("token");
  38. if (token) {
  39. config.headers["Authorization"] = "Bearer " + token;
  40. }
  41. return config;
  42. },
  43. setConfigError(error) {
  44. setState({ httpLoading: true });
  45. return Promise.reject(error);
  46. },
  47. successEvent(response) {
  48. setState({ httpLoading: false });
  49. return response;
  50. },
  51. errorEvent(error) {
  52. setState({ httpLoading: false });
  53. if (error.response.status) {
  54. error.response.data.status = error.response.status;
  55. }
  56. return Promise.reject(error.response.data);
  57. },
  58. httpGet(url, params, needWarning) {
  59. const { getAxiosInstance } = model();
  60. const { warnning } = model("loadingModel");
  61. params = params || {};
  62. return new Promise((resolve, reject) => {
  63. getAxiosInstance()
  64. .get(url, {
  65. params: params,
  66. })
  67. .then(res => {
  68. resolve(res.data);
  69. })
  70. .catch(e => {
  71. if (needWarning) {
  72. warnning(e.error);
  73. }
  74. reject(e);
  75. });
  76. });
  77. },
  78. httpPost(url, body, options, needWarning) {
  79. const { getAxiosInstance } = model();
  80. const { warnning } = model("loadingModel");
  81. options = options || {};
  82. body = body || {};
  83. if (!(body instanceof FormData)) {
  84. if (options.body !== "json") {
  85. body = qs.stringify(body);
  86. }
  87. }
  88. return new Promise((resolve, reject) => {
  89. getAxiosInstance()
  90. .post(url, body, { withCredentials: true })
  91. .then(res => {
  92. resolve(res.data);
  93. })
  94. .catch(e => {
  95. reject(e);
  96. if (needWarning) {
  97. warnning(e.error);
  98. }
  99. });
  100. });
  101. },
  102. addAsyncStorage(key, value) {
  103. console.log(key, value);
  104. return new Promise(async (resolve, reject) => {
  105. try {
  106. await AsyncStorage.setItem(key, value);
  107. resolve();
  108. } catch (e) {
  109. reject(e);
  110. }
  111. });
  112. },
  113. removeAsyncStorage(key) {
  114. return new Promise(async (resolve, reject) => {
  115. try {
  116. await AsyncStorage.removeItem(key);
  117. resolve();
  118. } catch (e) {
  119. reject(e);
  120. }
  121. });
  122. },
  123. getAsyncStorage(key) {
  124. return new Promise(async (resolve, reject) => {
  125. try {
  126. let val = await AsyncStorage.getItem(key);
  127. console.log(key);
  128. console.log(val);
  129. resolve(val);
  130. } catch (e) {
  131. reject(e);
  132. }
  133. });
  134. },
  135. }),
  136. };