【React】React+TS 前端工程化 Axios二次封装

简介: 【React】React+TS 前端工程化 Axios二次封装

【React】React+TS 前端工程化 Axios二次封装

import axios, {
    AxiosError,
    AxiosInstance,
    AxiosRequestConfig,
    AxiosResponse,
    InternalAxiosRequestConfig
} from "axios";
//接口地址
const baseURL = "http://localhost:3000"
const service: AxiosInstance = axios.create({
    baseURL,
    //超时时间
    timeout: 5000,
})
//添加请求连拦截器
service.interceptors.request.use((config: InternalAxiosRequestConfig) => {
    //在发送请求之前做些什么
    const token: string | null = sessionStorage.getItem("token") || null
    if (token) {
        config.headers['Authorization'] = token
    }
    return config
}, (error: AxiosError) => {
    //对请求错误做些什么
    console.log(error, 'request-error')
    return Promise.reject(error)
})
//添加响应拦截器
service.interceptors.response.use((response: AxiosResponse) => {
    //2xx 范围内的状态码都会触发该函数。
    //对响应数据做点什么
    return response;
}, (error: AxiosError) => {
    //超出 2xx 范围的状态码都会触发该函数
    //对响应错误做点什么
    console.log(error, 'response-error')
    const {response} = error;
    // 处理 HTTP 网络错误
    let message = '';
    // HTTP 状态码
    const status = response?.status;
    switch (status) {
        case 401:
            message = 'token 失效,请重新登录';
            // 这里可以触发退出的 action
            break;
        case 403:
            message = '拒绝访问';
            break;
        case 404:
            message = '请求地址错误';
            break;
        case 500:
            message = '服务器故障';
            break;
        default:
            message = '网络连接故障';
    }
    console.log(message, "response-error-msg")
    return Promise.reject(error);
})
export const http = {
    get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
        return service.get(url, config)
    },
    post<T>(url: string, data?: object, config?: AxiosRequestConfig): Promise<T> {
        return service.post(url, data, config)
    },
    //...
}
export default service;
相关文章
|
前端开发 JavaScript 网络架构
react对antd中Select组件二次封装
本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。
508 2
react对antd中Select组件二次封装
|
前端开发
React使用useRef ts 报错
【8月更文挑战第17天】
276 4
|
前端开发
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
本文介绍了在React项目中如何添加路径别名alias以简化模块引入路径,设置组件props的默认值,以及如何二次封装Ant Design的Modal组件。文章还提供了具体的代码示例,包括配置Webpack的alias、设置defaultProps以及封装Modal组件的步骤和方法。
303 1
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
|
前端开发
react 封装防抖
react 封装防抖
117 4
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
98 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
前端开发 C++
使用 Vite 创建 React+TS+SW 项目并整合 AntDesign 、Scss 等组件或插件
本文记录了如何使用Vite创建一个React+TypeScript+Service Workers(SW)项目,并整合AntDesign组件库和Scss等插件,包括项目的创建、配置问题解决、AntDesign和Scss的整合方法。
937 1
封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
文章介绍了如何封装React-Antd的Table组件,包括参数和方法,如行选择(rowSelection)、页码(pageNum)、页面大小(pageSize)、分页方法等,以简化在不同表格组件中的重复代码。
388 0
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
|
JSON 前端开发 JavaScript
前端工程化:Webpack配置全攻略
【7月更文挑战第14天】
217 6

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 10
    Axios发送post请求下载文件