You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中通过Axios编写网络请求类

React中基于Axios的网络请求封装实现

以下是封装好的Axios网络请求工具类,包含常用HTTP方法封装、请求拦截器(自动携带Token、动态设置Content-Type)、响应拦截器处理:

import axios from 'axios';
import { appConstants } from '../constants/constants';

const httpClient = axios.create({
  baseURL: process.env.REACT_APP_API_ENDPOINT,
  headers: {
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin': '*'
  }
});

let authorizationHeader = '';

const onSuccess = (res) => Promise.resolve(res.data);
const onError = (response) => Promise.reject(response);

httpClient.interceptors.request.use((request) => {
  let token = "";
  if (localStorage.getItem(appConstants.LoginSessionKey) && localStorage.getItem(appConstants.LoginSessionKey).length !== 0) {
    token = localStorage.getItem(appConstants.LoginSessionKey).replace(/^"(.*)"$/, '$1');
  }
  request.headers.Authorization = "bearer " + token;
  if (request.options && request.options['iscontentSet']) {
    delete request.headers['Content-Type'];
  } else if (request.options) {
    request.headers['Content-Type'] = request.options && request.options['contentType'];
  }
  return request;
});

httpClient.interceptors.response.use((response) => {
  return response;
}, async (error) => {
  const { config: originalReq, response } = error;
  if (!originalReq.isRetryAttempt && response && response.status === 401) {
    throw error;
  } else {
    throw error;
  }
});

httpClient.interceptors.response.use(onSuccess, onError);

export default {
  getData: (url, options, responseType, queryParams) =>
    httpClient({
      method: "GET",
      url: url,
      params: queryParams,
      responseType: responseType
    }),
  postData: (url, requestBody, options) =>
    httpClient({
      method: "POST",
      url: url,
      data: requestBody,
      options: options,
    }),
  searchData: (url, requestBody, options) =>
    httpClient({
      method: "SEARCH",
      url: url,
      data: requestBody,
    }),
  putData: (url, requestBody, queryParams) =>
    httpClient({
      method: "PUT",
      url: url,
      data: requestBody,
      params: queryParams      
    }),

  /**
   * 设置Authorization请求头
   * @param {*} requestToken 
   */
   setAccessTokenAuthHeader: (requestToken) => {
    if (requestToken) {
      authorizationHeader = "bearer " + requestToken;
    }
  },

  /**
   * 在请求头中设置id_token
   * @param {*} requestToken 
   */
  setIdTokenAuthHeader: (requestToken) => {
    if (requestToken && requestToken.id_token) {
      authorizationHeader = "bearer " + requestToken.id_token;
    }
  },
  deleteData: (url, responseType, queryParams) =>
    httpClient({
      method: "DELETE",
      url: url,
      params: queryParams,
      responseType: responseType
    }),
};

调用示例

GET请求示例

import apiClient from './path-to-your-api-client';

const fetchUserData = async () => {
  try {
    const response = await apiClient.getData('/users', null, 'json', { id: 123 });
    console.log('用户数据:', response);
  } catch (error) {
    console.error('获取数据失败:', error);
  }
};

POST请求示例

import apiClient from './path-to-your-api-client';

const submitFormData = async () => {
  const formData = { name: 'John', email: 'john@example.com' };
  try {
    const response = await apiClient.postData('/users', formData, { contentType: 'application/json' });
    console.log('提交成功:', response);
  } catch (error) {
    console.error('提交失败:', error);
  }
};

PUT请求示例

import apiClient from './path-to-your-api-client';

const updateUserData = async () => {
  const updatedData = { name: 'John Doe' };
  try {
    const response = await apiClient.putData('/users/123', updatedData, { status: 'active' });
    console.log('更新成功:', response);
  } catch (error) {
    console.error('更新失败:', error);
  }
};

DELETE请求示例

import apiClient from './path-to-your-api-client';

const deleteUserData = async () => {
  try {
    const response = await apiClient.deleteData('/users/123', 'json', { reason: 'inactive' });
    console.log('删除成功:', response);
  } catch (error) {
    console.error('删除失败:', error);
  }
};

内容的提问来源于stack exchange,提问作者user20669732

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:40:23