ts + axios封装

本文介绍了如何使用TypeScript封装axios请求,包括get和post方法,以及响应结果的处理,重点讲述了错误处理策略和约定的接口返回格式。

https.ts文件

/**
 * @author  作者
 * @time    2020-9-27 8:47
 * @title   http请求封装
 * desc 前后端约定接口返回解构规范
 * {
 *    code: '1',
 *    data:" 请求成功",
 *    message: ""
 * }
 */
import { Interceptor } from './interceptor';
import { message, Modal } from 'ant-design-vue';
import qs from 'qs';

export class Http {
    public axios: any;


    constructor() {
        // 获取axios实例
        this.axios = new Interceptor().getInterceptors();
    }

    /**
     * get请求
     * @param {String} url [请求的url地址]
     * @param {object} params [请求时携带的参数, 默认为空]
     * @param {boolean} download [判断是否是下载请求, 默认为否]
     * @param {boolean} loading [判断是否是需要loading, 默认为否]
     * @desc 由于loading不能一成不变全屏加载,很多种情况都是局部loading,所以当loading为true时,会返回整个response,以便自行处理loading。
     */
    public getData(url: string, params: object = {}, download: boolean = false, loading: boolean = false) {

        return new Promise((resolve, reject) => {
            const config: any = { params };

            if (download) {
                config.responseType = 'blob';
            }

            this.axios.get(url, {
                ...config,
            }).then((res: any) => {
                this.resultHandle(res, resolve, loading);
            }).catch((err: { message: any; }) => {
                reject(err.message);
            });
        });

    }


    /**
     * post请求
     * get请求
     * @par
### 使用 Vite 和 TypeScript 封装 Axios 的示例 在现代前端开发中,使用 Vite 和 TypeScript 封装 Axios 是一种常见的做法。以下是一个详细的实现方案[^1]。 #### 1. 创建项目并安装依赖 首先,确保已经安装了 Vite、TypeScript 和 Axios。可以通过以下命令初始化项目并安装依赖: ```bash npm create vite@latest my-vite-project --template vanilla-ts cd my-vite-project npm install axios ``` #### 2. 创建 Axios 实例 在 `src` 目录下创建一个名为 `axiosInstance.ts` 的文件,用于封装 Axios 实例: ```typescript // src/axiosInstance.ts import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; const API_BASE_URL = 'https://api.example.com'; // 替换为实际的 API 地址 // 创建 Axios 实例 const axiosInstance: AxiosInstance = axios.create({ baseURL: API_BASE_URL, timeout: 10000, // 设置超时时间 headers: { 'Content-Type': 'application/json', }, }); // 请求拦截器 axiosInstance.interceptors.request.use( (config: AxiosRequestConfig) => { // 在发送请求之前做些什么,例如添加 token const token = localStorage.getItem('token'); if (token && config.headers) { config.headers.Authorization = `Bearer ${token}`; } return config; }, (error) => { // 对请求错误做些什么 return Promise.reject(error); } ); // 响应拦截器 axiosInstance.interceptors.response.use( (response: AxiosResponse) => { // 对响应数据做点什么 return response.data; }, (error) => { // 对响应错误做点什么 if (error.response) { // 根据不同的状态码处理错误 switch (error.response.status) { case 401: console.error('未授权,请重新登录'); break; case 403: console.error('没有权限访问该资源'); break; case 404: console.error('请求的资源不存在'); break; default: console.error('网络错误', error.message); } } return Promise.reject(error); } ); export default axiosInstance; ``` #### 3. 封装通用请求方法 为了简化代码调用,可以在 `axiosInstance.ts` 中进一步封装常用的 HTTP 方法: ```typescript // src/axiosInstance.ts export const request = <T = any>(config: AxiosRequestConfig): Promise<T> => { return axiosInstance(config).then((data) => data as T); }; export const get = <T = any>(url: string, config?: AxiosRequestConfig): Promise<T> => { return request<T>({ url, method: 'GET', ...config }); }; export const post = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> => { return request<T>({ url, method: 'POST', data, ...config }); }; export const put = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> => { return request<T>({ url, method: 'PUT', data, ...config }); }; export const del = <T = any>(url: string, config?: AxiosRequestConfig): Promise<T> => { return request<T>({ url, method: 'DELETE', ...config }); }; ``` #### 4. 在组件中使用封装Axios 以下是如何在 Vue 或 React 组件中使用封装好的 Axios 实例的示例: ```typescript // 示例:在 Vue 组件中使用 <script lang="ts"> import { defineComponent } from 'vue'; import { get } from '@/axiosInstance'; export default defineComponent({ name: 'ExampleComponent', async created() { try { const response = await get('/example-endpoint'); console.log('获取的数据:', response); } catch (error) { console.error('请求失败:', error); } }, }); </script> ``` 通过以上步骤,可以实现一个基于 Vite 和 TypeScript 的 Axios 封装,提升项目的可维护性和复用性[^1]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜丶陌颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值