Axios结合Typescript 二次封装完整详细场景使用案例

Axios 是一个基于 promise 的 HTTP 客户端,用于浏览器和 node.js。二次封装 Axios 主要是为了统一管理 HTTP 请求,例如设置统一的请求前缀、头部、超时时间,统一处理请求和响应的格式,以及错误处理等。

以下是一个使用 TypeScript 进行 Axios 二次封装的详细场景使用案例:

1. 创建 Axios 实例

首先,创建一个 Axios 实例,并配置通用参数。

复制代码
import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000, // 请求超时时间
  headers: {'Content-Type': 'application/json'}
});

export default instance;
2. 统一请求处理

封装请求方法,包括统一的请求前缀、头部处理等。

复制代码
// http.ts
import axios from './path/to/axiosInstance';

// 添加一个通用的请求前缀
function request(url: string, config?: AxiosRequestConfig) {
  const fullPath = `/api/${url}`;

  // 可以在这里添加通用的 header 或其他配置
  const defaultConfig = {
    headers: {
      'Authorization': `Bearer ${localStorage.getItem('token')}`
    }
  };

  return axios({
    url: fullPath,
    ...config,
    ...defaultConfig
  });
}

export default request;
3. 响应拦截器

处理响应拦截器,统一处理响应数据格式。

复制代码
// http.ts (继续上面的代码)
import axios, { AxiosInstance } from 'axios';

// 响应拦截器
instance.interceptors.response.use(response => {
  // 对响应数据做点什么
  return response.data;
}, error => {
  // 对响应错误做点什么
  return Promise.reject(error);
});

export default instance;
4. 错误处理

统一处理 HTTP 请求错误。

复制代码
// http.ts (继续上面的代码)
import { AxiosError } from 'axios';

// 使用封装的请求函数
function handleError(error: AxiosError) {
  if (error.response) {
    // 请求已发出,服务器响应了状态码 2xx 之外的其他状态
    console.error(error.response.data);
    console.error(error.response.status);
    console.error(error.response.headers);
  } else if (error.request) {
    // 请求已发出但没有收到响应
    console.error(error.request);
  } else {
    // 发生了触发请求错误的问题
    console.error('Error', error.message);
  }
  return Promise.reject(error);
}

export { handleError };
5. 使用封装的 HTTP 客户端

在组件或其他服务中使用封装的 HTTP 客户端进行请求。

复制代码
// SomeComponent.vue
import http from './path/to/http';
import { handleError } from './path/to/http';

export default {
  async created() {
    try {
      const response = await http('/user', {
        method: 'get'
      });
      this.user = response.data;
    } catch (error) {
      handleError(error);
    }
  }
};
6. 封装特定的 API 请求

创建特定的 API 服务文件,如用户服务。

复制代码
// api/user.ts
import http from '../http';

export const getUser = (userId: string) => http(`/users/${userId}`);
export const updateUser = (userId: string, userData: object) => http(`/users/${userId}`, {
  method: 'put',
  data: userData
});

// 其他 API 调用 ...
7. 使用特定的 API 服务

在组件中使用特定的 API 服务。

复制代码
// SomeComponent.vue
import { getUser, updateUser } from './api/user';

export default {
  methods: {
    async fetchUser() {
      try {
        const user = await getUser('123');
        this.user = user;
      } catch (error) {
        handleError(error);
      }
    },
    async saveUser() {
      try {
        await updateUser('123', { name: 'New Name' });
      } catch (error) {
        handleError(error);
      }
    }
  }
};

通过上述步骤,你可以创建一个可维护性高、易于使用的 HTTP 客户端,它包括统一的配置、拦截器、错误处理和 API 调用封装。这使得在项目中进行 API 请求变得更加一致和方便。

相关推荐
崔庆才丨静觅2 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅3 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅3 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅4 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊4 小时前
jwt介绍
前端
爱敲代码的小鱼4 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax