美文网首页
react + redux + react-redux + re

react + redux + react-redux + re

作者: charmingcheng | 来源:发表于2022-02-28 10:14 被阅读0次

修改项目目录

在src目录下新建assets, router, redux, styles, utils, views目录

安装axios,并封装

    1. 安装axios
yarn add axios
    1. 在utils目录下新建request.js
    1. 封装axios
import axios from "axios";
import { message } from "antd";

axios.defaults.timeout = 5000;
axios.defaults.baseURL = process.env.REACT_APP_BASE_URL;

axios.interceptors.request.use(
  (config) => {
    config.headers = {
      "Content-Type": "application/json",
      // "Authorization": ""
    };
    return config;
  },
  (error) => {
    console.log(error);
    return Promise.reject(error);
  }
);

axios.interceptors.response.use(
  (response) => {
    const res = response.data;

    if (res.code === 1) {
      message.error({
        content: res.message,
      });
    } else {
      return res;
    }
  },
  (error) => {
    if (
      error.response &&
      error.response.status !== 400 &&
      error.response.status !== 401
    ) {
      message.error({
        content:
          (error.response &&
            error.response.data &&
            error.response.data.message) ||
          error.message,
      });
    }
    if (error.response && error.response.status === 401) {
      message.error({
        content: "登录已经失效!",
      });
      // 处理登录失效 ??
    }
    if (error.response && error.response.status === 400) {
      message.error({
        content: error.response.data.message,
      });
    }
    return Promise.reject(error);
  }
);

export default {
  /**
   * get方法,对应get请求
   * @param {String} url [请求的url地址]
   * @param {Object} params [请求时携带的参数]
   */
  get(url, params) {
    return new Promise((resolve, reject) => {
      axios
        .get(url, {
          params: {
            ...params,
          },
        })
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },

  /**
   * post方法,对应post请求
   * @param {String} url [请求的url地址]
   * @param {Object} params [请求时携带的参数]
   */
  post(url, data) {
    return new Promise((resolve, reject) => {
      axios
        .post(`${url}`, data)
        .then((res) => {
          resolve(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },

  /**
   * 封装patch请求
   * @param url
   * @param data
   * @returns {Promise}
   */
  patch(url, data = {}) {
    return new Promise((resolve, reject) => {
      axios.patch(url, data).then(
        (res) => {
          resolve(res);
        },
        (err) => {
          reject(err);
        }
      );
    });
  },

  /**
   * 封装put请求
   * @param url
   * @param data
   * @returns {Promise}
   */
  put(url, data = {}) {
    return new Promise((resolve, reject) => {
      axios.put(url, data).then(
        (res) => {
          resolve(res);
        },
        (err) => {
          reject(err);
        }
      );
    });
  },

  /**
   * 封装delete请求
   * @param url
   * @param data
   * @returns {Promise}
   */
  delete(url, params) {
    return new Promise((resolve, reject) => {
      axios
        .delete(url, {
          params: {
            ...params,
          },
        })
        .then(
          (res) => {
            resolve(res);
          },
          (err) => {
            reject(err);
          }
        );
    });
  },
};

项目配置

在项目根目录新建 .env.development.env.production 文件,配置 REACT_APP_BASE_URL 接口地址:

// .env.development
REACT_APP_BASE_URL = 'http://www.app.test/api'
// .env.production
REACT_APP_BASE_URL = '/api'

相关文章

网友评论

      本文标题:react + redux + react-redux + re

      本文链接:https://www.haomeiwen.com/subject/wqjxrrtx.html