axios 封装

要在前端使用 Axios 进行封装,可以创建一个 Axios 实例并配置拦截器来统一处理请求和响应。在 Vue 3 项目中,这个封装过程可以通过一个单独的 JavaScript 文件来完成。

1. 安装 Axios

首先,确保你的项目中安装了 Axios:

npm install axios

2. 创建 Axios 封装文件

在 src 目录下创建一个名为 axios.js 的文件:

// src/axios.js
import axios from 'axios';

// 创建 axios 实例
const instance = axios.create({
  baseURL: 'https://api.example.com', // 替换为你的 API 基础路径
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    // 比如在请求头中添加 token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response.data;
  },
  error => {
    // 对响应错误做点什么
    if (error.response) {
      // 服务器返回的错误状态码
      switch (error.response.status) {
        case 401:
          // 未授权,可以重定向到登录页面
          window.location.href = '/login';
          break;
        case 403:
          // 无权限访问
          alert('无权限访问');
          break;
        case 404:
          // 资源未找到
          alert('资源未找到');
          break;
        case 500:
          // 服务器错误
          alert('服务器错误');
          break;
        default:
          alert('未知错误');
      }
    }
    return Promise.reject(error);
  }
);

export default instance;

3. 使用封装的 Axios 实例

在需要使用 Axios 的地方引入并使用封装的 Axios 实例。例如,在一个 Vue 组件中:

<template>
  <div>
    <h1>API 数据</h1>
    <ul>
      <li v-for="item in data" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
import axios from '../axios'; // 引入封装的 axios 实例

export default {
  setup() {
    const data = ref([]);

    const fetchData = async () => {
      try {
        const response = await axios.get('/items'); // 请求数据
        data.value = response;
      } catch (error) {
        console.error('请求错误:', error);
      }
    };

    onMounted(() => {
      fetchData();
    });

    return {
      data
    };
  }
};
</script>

<style scoped>
h1 {
  color: #333;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  background: #eee;
  margin: 5px 0;
  padding: 10px;
  border-radius: 5px;
}
</style>

总结

通过以上步骤,你可以在 Vue 3 项目中实现对 Axios 的封装,从而统一处理请求和响应,方便管理 API 调用。封装后的 Axios 实例可以在项目的任何地方进行引入和使用,极大地提高了代码的可维护性和可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值