返回

Vue3轻松玩转axios封装与接口配置

前端

拥抱 Vue 3 的魅力:轻松掌握 Axios 封装与接口配置

踏入 Vue 3 的迷人世界,让我们携手探索如何将 Axios 封装得完美无瑕,如何配置接口做到游刃有余。本文将为您提供全方位的指导,让您轻松掌握这项技术,提升您的开发效率和项目质量。

一、开启 Axios 封装之旅

1. 缘起:为何封装 Axios?

在实际开发中,我们经常需要与服务器进行数据交互,Axios 作为一款优秀的 HTTP 库,能够轻松实现这一需求。然而,随着项目需求的不断扩展,我们可能会遇到各种各样的问题,比如每次请求都需要手动添加 token、处理不同的状态码等。为了避免这些繁琐的操作,提高开发效率,Axios 封装应运而生。

2. 封装步骤:一步步构建 Axios 封装

(1)安装 Axios 库

npm install axios

(2)创建 Axios 实例

import axios from 'axios';

const instance = axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 10000,
});

(3)请求拦截器:在请求发出前做点什么

instance.interceptors.request.use((config) => {
  // 在每个请求体里加上 token
  config.headers['Authorization'] = `Bearer ${token}`;

  return config;
});

(4)响应拦截器:在收到响应后做点什么

instance.interceptors.response.use(
  (response) => {
    // 对不同状态码做不同处理
    switch (response.status) {
      case 200:
        return response.data;
      case 401:
        // 登录状态 token 失效,跳转到登录页
        window.location.href = '/login';
        break;
      default:
        throw new Error(`请求错误,状态码:${response.status}`);
    }
  },
  (error) => {
    // 统一处理错误
    console.error('请求出错:', error);
    return Promise.reject(error);
  }
);

3. 迈向成熟:Axios 封装的进阶之道

(1)全局错误处理

instance.defaults.timeout = 10000;

instance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    // 对请求错误做统一处理
    if (error.response && error.response.status === 401) {
      // 登录状态 token 失效,跳转到登录页
      window.location.href = '/login';
    } else {
      // 其他错误情况,弹出错误提示
      Message.error('请求出错,请稍后再试');
    }
    return Promise.reject(error);
  }
);

(2)mock 数据模拟

if (process.env.NODE_ENV === 'development') {
  instance.interceptors.request.use((config) => {
    // 在开发环境下,使用 mock 数据模拟
    if (config.url === '/api/user/info') {
      return {
        data: {
          id: 1,
          name: 'John Doe',
          age: 20,
        },
      };
    }
    return config;
  });
}

二、接口配置:让请求更加灵活

1. 配置 baseURL,减少重复代码

instance.defaults.baseURL = 'http://localhost:3000';

2. 配置 headers,传递通用请求头

instance.defaults.headers.common['Content-Type'] = 'application/json';

3. 配置 timeout,避免长时间等待

instance.defaults.timeout = 10000;

4. 配置 withCredentials,允许跨域携带 cookie

instance.defaults.withCredentials = true;

三、示例代码:一试便知

// GET 请求
instance.get('/api/user/info').then((response) => {
  console.log(response.data);
});

// POST 请求
instance.post('/api/user/login', {
  username: 'admin',
  password: '123456',
}).then((response) => {
  console.log(response.data);
});

// PUT 请求
instance.put('/api/user/update', {
  id: 1,
  name: 'John Doe',
  age: 20,
}).then((response) => {
  console.log(response.data);
});

// DELETE 请求
instance.delete('/api/user/delete', {
  params: {
    id: 1,
  },
}).then((response) => {
  console.log(response.data);
});

结论

Vue 3 的出现为我们带来了更加强大的开发体验,而 Axios 封装与接口配置则是我们开发过程中必不可少的一环。通过本文的讲解,相信您已经掌握了 Axios 封装与接口配置的精髓。赶快在您的项目中实践起来吧,让您的开发工作更加轻松高效!

常见问题解答

1. 为什么需要封装 Axios?

封装 Axios 可以避免在每个请求中手动添加 token、处理不同状态码等繁琐操作,提高开发效率和项目质量。

2. 如何处理 Axios 请求中的错误?

可以使用响应拦截器统一处理 Axios 请求中的错误,对不同状态码做出不同的处理,如跳转到登录页、弹出错误提示等。

3. 如何配置 Axios 的 baseURL?

通过设置 instance.defaults.baseURL,可以将所有请求的基准 URL 配置为相同的值,避免在每个请求中重复输入。

4. 如何在 Axios 请求中传递自定义请求头?

通过设置 instance.defaults.headers.common,可以为所有请求添加通用的请求头,如 Content-Type。

5. 如何设置 Axios 请求的超时时间?

通过设置 instance.defaults.timeout,可以为所有请求设置一个超时时间,避免长时间等待。