httpModel.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. token: "",
  8. config: {},
  9. httpLoading: false,
  10. },
  11. actions: ({ model, setState }) => ({
  12. getAxiosInstance() {
  13. const {
  14. baseUrl,
  15. setConfig,
  16. setConfigError,
  17. successEvent,
  18. errorEvent,
  19. } = model();
  20. const axiosInstance = axios.create({
  21. baseURL: baseUrl,
  22. });
  23. axiosInstance.interceptors.request.use(
  24. (config) => setConfig(config),
  25. (error) => setConfigError(error)
  26. );
  27. axiosInstance.interceptors.response.use(
  28. (response) => successEvent(response),
  29. (error) => errorEvent(error)
  30. );
  31. return axiosInstance;
  32. },
  33. async setConfig(config) {
  34. setState({ httpLoading: true });
  35. config.headers = config.headers || {};
  36. let token = await AsyncStorage.getItem("token");
  37. if (token) {
  38. config.headers["Authorization"] = "Bearer " + token;
  39. }
  40. return config;
  41. },
  42. setConfigError(error) {
  43. setState({ httpLoading: true });
  44. return Promise.reject(error);
  45. },
  46. successEvent(response) {
  47. setState({ httpLoading: false });
  48. return response;
  49. },
  50. errorEvent(error) {
  51. setState({ httpLoading: false });
  52. if (error.response.status) {
  53. error.response.data.status = error.response.status;
  54. }
  55. return Promise.reject(error.response.data);
  56. },
  57. httpGet(url, params, needWarning) {
  58. const { getAxiosInstance } = model();
  59. const { warnning } = model("loadingModel");
  60. params = params || {};
  61. return new Promise((resolve, reject) => {
  62. getAxiosInstance()
  63. .get(url, {
  64. params: params,
  65. })
  66. .then((res) => {
  67. resolve(res.data);
  68. })
  69. .catch((e) => {
  70. if (needWarning) {
  71. warnning(e.error);
  72. }
  73. reject(e);
  74. });
  75. });
  76. },
  77. httpPost(url, body, options, needWarning) {
  78. const { getAxiosInstance } = model();
  79. options = options || {};
  80. body = body || {};
  81. if (!(body instanceof FormData)) {
  82. if (options.body !== "json") {
  83. body = qs.stringify(body);
  84. }
  85. }
  86. return new Promise((resolve, reject) => {
  87. getAxiosInstance()
  88. .post(url, body, { withCredentials: true })
  89. .then((res) => {
  90. resolve(res.data);
  91. })
  92. .catch((e) => {
  93. reject(e);
  94. if (needWarning) {
  95. warnning(e.error);
  96. }
  97. });
  98. });
  99. },
  100. addAsyncStorage(key, value) {
  101. console.log(value);
  102. return AsyncStorage.setItem(key, value);
  103. },
  104. removeAsyncStorage(key) {
  105. return AsyncStorage.removeItem(key);
  106. },
  107. getAsyncStorage(key) {
  108. return AsyncStorage.getItem(key);
  109. },
  110. }),
  111. };