react如何封装axios

Posted fengshaopu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react如何封装axios相关的知识,希望对你有一定的参考价值。

Axios简介

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

特性

  • 支持node端和浏览器端
  • 支持拦截器等高级配置
  • 使用Promise管理异步,告别传统callback方式
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

安装

npm install axios --save

封装 可以在头上加上token

 config.headers.authorization = token 

index.js

/**
 * 网络请求配置
 */
import axios from "axios";

axios.defaults.timeout = 100000;
axios.defaults.baseURL = "http://test.mediastack.cn/";

/**
 * http request 拦截器
 */
axios.interceptors.request.use(
  (config) => 
    config.data = JSON.stringify(config.data);
    config.headers = 
      "Content-Type": "application/json",
    ;
    return config;
  ,
  (error) => 
    return Promise.reject(error);
  
);

/**
 * http response 拦截器
 */
axios.interceptors.response.use(
  (response) => 
    if (response.data.errCode === 2) 
      console.log("过期");
    
    return response;
  ,
  (error) => 
    console.log("请求出错:", error);
  
);

/**
 * 封装get方法
 * @param url  请求url
 * @param params  请求参数
 * @returns Promise
 */
export function get(url, params = ) 
  return new Promise((resolve, reject) => 
    axios.get(url, 
        params: params,
      ).then((response) => 
        landing(url, params, response.data);
        resolve(response.data);
      )
      .catch((error) => 
        reject(error);
      );
  );


/**
 * 封装post请求
 * @param url
 * @param data
 * @returns Promise
 */

export function post(url, data) 
  return new Promise((resolve, reject) => 
    axios.post(url, data).then(
      (response) => 
        //关闭进度条
        resolve(response.data);
      ,
      (err) => 
        reject(err);
      
    );
  );


/**
 * 封装patch请求
 * @param url
 * @param data
 * @returns Promise
 */
export function patch(url, data = ) 
  return new Promise((resolve, reject) => 
    axios.patch(url, data).then(
      (response) => 
        resolve(response.data);
      ,
      (err) => 
        msag(err);
        reject(err);
      
    );
  );


/**
 * 封装put请求
 * @param url
 * @param data
 * @returns Promise
 */

export function put(url, data = ) 
  return new Promise((resolve, reject) => 
    axios.put(url, data).then(
      (response) => 
        resolve(response.data);
      ,
      (err) => 
        msag(err);
        reject(err);
      
    );
  );


//统一接口处理,返回数据
export default function (fecth, url, param) 
  let _data = "";
  return new Promise((resolve, reject) => 
    switch (fecth) 
      case "get":
        console.log("begin a get request,and url:", url);
        get(url, param)
          .then(function (response) 
            resolve(response);
          )
          .catch(function (error) 
            console.log("get request GET failed.", error);
            reject(error);
          );
        break;
      case "post":
        post(url, param)
          .then(function (response) 
            resolve(response);
          )
          .catch(function (error) 
            console.log("get request POST failed.", error);
            reject(error);
          );
        break;
      default:
        break;
    
  );


//失败提示
function msag(err) 
  if (err && err.response) 
    switch (err.response.status) 
      case 400:
        alert(err.response.data.error.details);
        break;
      case 401:
        alert("未授权,请登录");
        break;

      case 403:
        alert("拒绝访问");
        break;

      case 404:
        alert("请求地址出错");
        break;

      case 408:
        alert("请求超时");
        break;

      case 500:
        alert("服务器内部错误");
        break;

      case 501:
        alert("服务未实现");
        break;

      case 502:
        alert("网关错误");
        break;

      case 503:
        alert("服务不可用");
        break;

      case 504:
        alert("网关超时");
        break;

      case 505:
        alert("HTTP版本不受支持");
        break;
      default:
    
  


/**
 * 查看返回的数据
 * @param url
 * @param params
 * @param data
 */
function landing(url, params, data) 
  if (data.code === -1) 
  


http.js

import http from './index'


/**
 * 获取首页列表
 */
function getArticleList()
  return  http("get","https://api.it120.cc/small4/cms/news/list");


export 
   getArticleList


import getArticleList from '../axios/http'

 

		componentDidMount()
           getArticleList().then(
            (res) => 
                console.log("get article response:", res);
            ,
           (error) => 
                console.log("get response failed!");
            
         );

	

以上是关于react如何封装axios的主要内容,如果未能解决你的问题,请参考以下文章

react如何封装axios

解决react项目中跨域和axios封装使用

前端如何入门面对传统的html,css,js,三大框架react,vue,angular?

react axios的二次封装

react封装基于axios的API请求

react-native 请求封装