vue中axios的封装问题(简易版拦截,get,post)

yizhihongxing

Vue中Axios的封装

Axios是基于Promise的HTTP库,适用于浏览器和Node.js平台,可以在Vue中使用Axios进行网络请求。在实际开发中,我们通常需要将Axios进行封装,使它更加符合我们的业务需求,提高代码的复用性和维护性。

Axios的封装目的

Axios的封装主要有以下几个目的:

  1. 方便统一处理网络请求的异常,如超时、401/403等错误状态码。
  2. 简化网络请求的调用方式,如定义API接口、封装get/post等请求方法。
  3. 提高代码的复用性和维护性,减少重复代码。

简单封装方法

下面是基于Axios简单封装的示例代码:

安装Axios

在使用Axios之前,需要先安装Axios库。可以使用npm或yarn来安装。

# 使用npm安装
npm install axios --save

# 使用yarn安装
yarn add axios

引入Axios并创建实例

在Vue中使用Axios,需要先引入Axios,并创建一个Axios的实例。

// 引入Axios
import axios from 'axios';

// 创建Axios实例
const instance = axios.create({
  // 设置请求超时时间
  timeout: 5000
});

封装get请求

在Axios的实例中,封装get请求非常简单,只需要对响应结果进行一次简单处理,即可返回数据。

/**
 * Get请求方法封装
 * @param url 请求地址
 * @param params 请求参数
 */
export const get = (url, params) => {
  return instance.get(url, { params })
    .then(response => {
      return response.data;
    })
    .catch(error => {
      console.error(`[Axios] GET请求出错: ${error}`);
      return Promise.reject(error);
    });
};

封装post请求

在Axios的实例中,封装post请求需要对请求头和请求体进行相应的设置。

/**
 * Post请求方法封装
 * @param url 请求地址
 * @param data 请求参数
 */
export const post = (url, data) => {
  return instance.post(url, data, {
    // 设置请求头类型
    headers: {
      'Content-Type': 'application/json',
    },
  })
  .then(response => {
    return response.data;
  })
  .catch(error => {
    console.error(`[Axios] POST请求出错: ${error}`);
    return Promise.reject(error);
  });
};

完整封装方法

对于复杂的业务场景,以上简单封装的方法可能已经不能满足要求,需要对Axios进行更完整的封装。

下面是更完整的封装示例代码:

异常拦截处理

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 如需统一设置请求头
    // config.headers.Authorization = 'Bearer token';
    return config;
  },
  error => {
    console.error(`[Axios] 请求拦截器出错: ${error}`);
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    const { data, status } = response;
    return {
      data,
      status,
    };
  },
  error => {
    console.error(`[Axios] 响应拦截器出错: ${error}`);
    const { response } = error;
    if (response) {
      const { status, data } = response;
      // 统一处理401/403等错误状态码
      if (status === 401 || status === 403) {
        console.error(`[Axios] 请求${response.url}出现了${status}错误`);
        return Promise.reject(error);
      } else {
        return Promise.reject(error);
      }
    } else {
      console.error(`[Axios] 请求${error.request.url}超时`);
      return Promise.reject(new Error('请求超时,请稍后重试!'));
    }
  }
);

API接口定义

const API_ROOT = 'http://localhost:8080/api';

export const API = {
  LOGIN: `${API_ROOT}/login`,
  LOGOUT: `${API_ROOT}/logout`,
  USERS_LIST: `${API_ROOT}/users/list`,
};

请求方法封装

/**
 * Get请求方法封装
 * @param url 请求地址
 * @param params 请求参数
 */
export const get = (url, params) => {
  return instance.get(url, { params })
    .then(response => {
      return response.data;
    })
    .catch(error => {
      console.error(`[Axios] GET请求出错: ${error}`);
      return Promise.reject(error);
    });
};

/**
 * Post请求方法封装
 * @param url 请求地址
 * @param data 请求参数
 */
export const post = (url, data) => {
  return instance.post(url, data, {
    // 设置请求头类型
    headers: {
      'Content-Type': 'application/json',
    },
  })
  .then(response => {
    return response.data;
  })
  .catch(error => {
    console.error(`[Axios] POST请求出错: ${error}`);
    return Promise.reject(error);
  });
};

/**
 * 登录接口封装
 * @param params 请求参数
 */
export const login = (params) => {
  return post(API.LOGIN, params);
};

/**
 * 登出接口封装
 */
export const logout = () => {
  return post(API.LOGOUT);
};

/**
 * 用户列表接口封装
 * @param params 请求参数
 */
export const userList = (params) => {
  return get(API.USERS_LIST, params);
};

示例1:使用封装后的get请求示例

import { userList } from '@/api/index';

export default {
  data() {
    return {
      users: [],
    };
  },
  mounted() {
    this.loadUsers();
  },
  methods: {
    loadUsers() {
      userList({})
        .then(data => {
          this.users = data;
        })
        .catch(error => {
          console.error(`获取用户列表出现了错误:${error.message}`);
        });
    },
  },
};

示例2:使用封装后的post请求示例

import { login } from '@/api/index';

export default {
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    submitForm() {
      const params = { username: this.username, password: this.password };
      login(params)
        .then(() => {
          this.$router.push({ name: 'Home' });
        })
        .catch(error => {
          console.error(`登录失败:${error.message}`);
        });
    },
  },
};

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中axios的封装问题(简易版拦截,get,post) - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Windows量身定做的登录管理工具

    Windows量身定做的登录管理工具 Windows系统提供了许多登录管理工具,使得用户可以方便地管理登录设置。本文将详细介绍这些工具的功能和使用方法,包括: 本地用户和组管理器 计算机管理控制台 控制面板中的用户账户 本地用户和组管理器 本地用户和组管理器是一个强大的Windows管理工具,可以用来查看和修改本地计算机上的用户和组设置。它可以通过下列步骤打…

    other 2023年6月25日
    00
  • Vue Transition实现类原生组件跳转过渡动画的示例

    Vue Transition实现类原生组件跳转过渡动画的示例攻略 1. 准备工作 首先,你需要在你的Vue项目中安装Vue-Router插件,用于实现路由功能。你可以使用以下命令进行安装: npm install vue-router 2. 添加路由配置 在你的Vue项目中的main.js文件中,引入Vue和Vue-Router,并且创建路由实例。在路由实例…

    other 2023年6月28日
    00
  • C语言实现密码强度检测

    C语言实现密码强度检测攻略 简介 密码强度检测是一种常见的安全性检查,用于评估密码的复杂程度和安全性。在C语言中,我们可以使用一些技术和算法来实现密码强度检测。 步骤 1. 导入必要的头文件 首先,我们需要导入一些必要的头文件,以便使用C语言提供的函数和数据类型。在这个例子中,我们将使用stdio.h和string.h头文件。 #include <st…

    other 2023年8月18日
    00
  • 关于sql:wherein子句具有多个值

    关于SQL: WHERE IN子句具有多个值 在SQL中,WHERE IN子句用于指定一个条件,该条件基于一组值。当我们需要在查询中指定多值时,WHERE IN子句非常有用。本攻略将详细介绍WHERE IN子句的用法,包括如何在查询中使用多个值。 WHERE IN子句 WHERE子句用于指定一个条件,该条件基于一组值。它的语法如下: SELECT colum…

    other 2023年5月7日
    00
  • 手把手教你实现一个vue进度条组件!

    手把手教你实现一个Vue进度条组件! 在前端开发中,进度条组件是非常重要的一个组件之一,它可以帮助展示当前操作的进度,提升用户体验。本文将手把手教你如何实现一个基于Vue的简单进度条组件。 第一步: 搭建项目环境 首先,我们需要在本地搭建一个Vue.js的项目环境,如果你还没安装Vue.js,可以在官网查看具体安装方式: https://cn.vuejs.o…

    其他 2023年3月28日
    00
  • FreeRTOS动态内存分配管理heap_5示例

    针对您提到的FreeRTOS动态内存分配管理heap_5示例,我将提供详细的攻略如下: 一、FreeRTOS动态内存分配管理 在FreeRTOS中,内存管理既可以是静态的也可以是动态的。静态内存分配意味着在编译时将内存分配给任务和其它内核对象,而动态内存分配是在运行时进行的。动态内存分配使得任务可以根据需要申请和释放内存,这是一种非常强大和灵活的方法。实现动…

    other 2023年6月27日
    00
  • windows系统怎么把虚拟内存从C盘移到D盘?

    将虚拟内存从C盘移到D盘的攻略 以下是将虚拟内存从C盘移到D盘的详细步骤: 打开“控制面板”:点击Windows开始菜单,然后在搜索栏中输入“控制面板”,并选择打开。 进入“系统和安全”:在控制面板中,找到“系统和安全”选项,然后点击进入。 打开“系统”:在“系统和安全”页面中,找到“系统”选项,然后点击进入。 进入“高级系统设置”:在“系统”页面中,找到右…

    other 2023年8月1日
    00
  • 将ChatGPT接入微信实现智能回复功能

    非常感谢您对“将ChatGPT接入微信实现智能回复功能”的关注,下面是详细的攻略说明。 准备工作 在开始接入ChatGPT之前,需要先准备好以下工作: 注册微信开发者平台账号,创建公众号并获取AppID和AppSecret。 注册腾讯云账号,并在API密钥管理中创建访问密钥。 接入ChatGPT 接下来我们需要通过以下步骤将ChatGPT接入微信实现智能回复…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部