vue封装axios

373 阅读2分钟

在 Vue.js 项目中封装 Axios 是一个常见的做法,这样做可以简化请求逻辑、统一错误处理、简化 API 调用等。

1. 安装 Axios

确保你已经在项目中安装了 Axios:

Bash
深色版本
npm install axios

2. 创建封装模块

创建一个 JavaScript 文件,比如 axios.js,并在其中封装 Axios:

Javascript
深色版本
import axios from 'axios';

// 创建 axios 实例
const service = axios.create({
  baseURL: process.env.BASE_API || 'http://localhost:3000/api', // api base_url
  timeout: 10000 // 请求超时时间
});

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

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    // 对响应数据做点什么
    if (res.code !== 200) {
      // 错误提示
      Message({
        message: res.message,
        type: 'error',
        duration: 5 * 1000
      });
      // 500 内部服务器错误
      return Promise.reject(new Error(res.message));
    } else {
      return res;
    }
  },
  error => {
    // 对响应错误做点什么(网络问题)
    console.log('err' + error); // eslint-disable-line
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    });
    return Promise.reject(error);
  }
);

export default service;

3. 在 Vue 项目中使用封装的 Axios

在你的 Vue 组件中,你可以导入封装好的 Axios 并使用它来发起请求。

示例组件 SomeComponent.vue

Javascript
深色版本
<template>
  <div>
    <button @click="fetchData">Fetch Data</button>
  </div>
</template>

<script>
import axios from '@/utils/axios'; // 假设这是你封装的 axios 文件路径

export default {
  methods: {
    fetchData() {
      axios.get('/some-endpoint')
        .then(response => {
          console.log(response);
        })
        .catch(error => {
          console.error(error);
        });
    }
  }
};
</script>

注意事项

  • 环境变量:在 axios.create() 中使用了 process.env.BASE_API,这允许你在不同的环境(如开发、测试、生产)下使用不同的基础 URL。
  • 错误处理:在响应拦截器中添加了错误处理逻辑,可以根据返回的状态码做出相应的提示或动作。
  • 请求头:在请求拦截器中添加了 Authorization 头,这样每次请求都会带上用户的 token(假设你使用了 token 进行身份验证)。

这个封装的例子展示了如何设置 Axios 的基本配置,如何添加请求和响应拦截器来统一处理请求和响应,以及如何在 Vue 组件中使用封装后的 Axios。