vue axios封装及API统一管理的方法

yizhihongxing

下面介绍一下“Vue axios封装及API统一管理的方法”的完整攻略。

一、为什么需要封装及统一管理API

在Vue项目中使用axios发送HTTP请求是非常常见的,而每次发送请求时,都需要编写一大堆繁琐的代码,例如设置请求头、处理错误、在请求完成后进行数据处理等等。

同时,在一个大型项目中,可能会存在多个人协作开发,每个人都有可能编写自己的API请求函数,这样会导致代码冗余,无法统一管理。

因此,我们需要将axios进行封装,并统一管理API请求函数,方便团队开发以及后期维护。

二、如何封装及统一管理API

下面介绍一下封装及统一管理API的具体步骤。

1. 创建API目录

在Vue项目的src目录下创建一个api目录,用于存放API请求函数。

2. 创建base.js文件

在api目录下创建一个base.js文件,用于初始化axios实例。

import axios from 'axios';

// 创建axios实例
const instance = axios.create({
  baseURL: 'http://localhost:3000/api', // API请求的默认前缀
  timeout: 5000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
  },
});

// 设置post请求头
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 添加请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做某事,比如加一个loading
    return config;
  },
  error => {
    // 请求错误时做些事
    return Promise.reject(error);
  },
);

// 添加响应拦截器
instance.interceptors.response.use(
  response => {
    // 在响应之后做某事,比如关闭loading
    return response.data;
  },
  error => {
    // 对响应错误做点什么
    return Promise.reject(error);
  },
);

export default instance;

这里我们初始化了一个axios实例,并设置了默认的请求地址、超时时间和请求头。

3. 创建API请求文件

在api目录下创建一个文件,例如user.js,用于存放用户相关的API请求函数。

import instance from './base';

// 用户登录
export const login = params => {
  return instance.post('/user/login', params);
};

// 获取用户信息
export const getUserInfo = () => {
  return instance.get('/user/info');
};

// 修改用户信息
export const updateUser = params => {
  return instance.post('/user/update', params);
};

这里我们以用户相关的API为例,编写了登录、获取用户信息和修改用户信息三个API请求函数。

4. 统一管理API请求函数

为了方便管理,我们可以将所有API请求函数存放在一个文件中,在这个文件中统一导出。

在api目录下创建一个index.js文件,用于导出我们所有API请求函数。

import * as user from './user';

export default {
  user,
};

这样,在我们的组件中,就可以通过引入api/index.js,然后调用api.user.login来发送请求,而无需再次编写大量的axios请求代码了。

三、示例说明

示例一:登录页面

在登录页面中,我们需要编写一个方法,来发送登录请求,获取到返回的token,并将其存储到localStorage中。

<template>
  <div>
    <input type="text" v-model="username" placeholder="请输入用户名" />
    <input type="password" v-model="password" placeholder="请输入密码" />
    <button @click="login">登录</button>
  </div>
</template>

<script>
import api from '@/api';

export default {
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    async login() {
      try {
        const res = await api.user.login({ username: this.username, password: this.password });
        localStorage.setItem('token', res.token);
        alert('登录成功!');
      } catch (error) {
        alert('登录失败!');
      }
    },
  },
};
</script>

在这个示例中,我们引入了api/user,并通过api.user.login方法来发送登录请求,通过async/await语法来处理异步请求结果。

示例二:用户信息页面

在用户信息页面中,我们需要编写一个方法,来获取用户信息,并将其显示在页面上。

<template>
  <div>
    <div>用户名:{{ userInfo.username }}</div>
    <div>手机号:{{ userInfo.phone }}</div>
    <div>邮箱:{{ userInfo.email }}</div>
    <button @click="updateUser">修改信息</button>
  </div>
</template>

<script>
import api from '@/api';

export default {
  data() {
    return {
      userInfo: {},
    };
  },
  created() {
    this.getUserInfo();
  },
  methods: {
    async getUserInfo() {
      try {
        const res = await api.user.getUserInfo();
        this.userInfo = res.data;
      } catch (error) {
        alert('获取用户信息失败!');
      }
    },
    async updateUser() {
      try {
        // 假设我们的表单中有username、phone、email三个字段
        const params = {
          username: this.userInfo.username,
          phone: this.userInfo.phone,
          email: this.userInfo.email,
        };
        await api.user.updateUser(params);
        alert('修改用户信息成功!');
      } catch (error) {
        alert('修改用户信息失败!');
      }
    },
  },
};
</script>

在这个示例中,我们通过api.user.getUserInfo方法来获取用户信息,并通过async/await语法来处理异步请求结果。

同时,在修改用户信息时,我们将当前用户信息展示在表单中,并通过api.user.updateUser方法来发送请求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue axios封装及API统一管理的方法 - Python技术站

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

相关文章

  • C++ 回调接口设计和二进制兼容详细

    C++ 回调接口设计和二进制兼容详细攻略 概述 在 C++ 编程过程中,回调接口是常用的设计模式。它能够实现模块之间的解耦,提高代码的复用性和可读性。当接口发生变化时,需要注意二进制兼容性,以免出现不兼容的情况。 本攻略将介绍如何在设计回调接口时考虑到二进制兼容性问题。 接口设计 函数签名的选择 在设计回调接口时,我们需要考虑到其使用场景,确定接口的函数签名…

    other 2023年6月26日
    00
  • Android 中使用 ViewPager实现屏幕页面切换和页面轮播效果

    Android 中使用 ViewPager 实现屏幕页面切换和页面轮播效果攻略 ViewPager 是 Android 中常用的控件,用于实现屏幕页面切换和页面轮播效果。下面是详细的攻略,包含两个示例说明。 步骤一:添加 ViewPager 到布局文件 首先,在你的布局文件中添加 ViewPager 控件。例如,创建一个名为 activity_main.xm…

    other 2023年9月6日
    00
  • window下用taskkill杀死进程

    window下用taskkill杀死进程 在Windows系统下,有时候我们需要杀死某个进程来解决问题。Windows系统自带了用于杀死进程的命令行工具taskkill。本文将介绍如何使用taskkill命令杀死进程。 taskkill命令介绍 taskkill是Windows系统自带的命令行工具,用于杀死进程。taskkill命令的语法如下: taskki…

    其他 2023年3月28日
    00
  • 关于docker cgroups资源限制的问题

    Docker Cgroups资源限制问题攻略 什么是Cgroups资源限制? Cgroups(Control Groups)是Linux内核提供的一种机制,用于限制和隔离进程组的资源使用。Docker使用Cgroups来实现对容器资源的限制和管理。通过Cgroups,可以对CPU、内存、磁盘IO等资源进行限制,以确保容器之间的资源互不干扰。 如何设置Cgro…

    other 2023年8月2日
    00
  • 浅谈Golang数据竞态

    浅谈Golang数据竞态 什么是数据竞态? 数据竞态(Data Race)是指在多线程编程中,多个线程同时访问共享的数据,并且至少有一个线程对该数据进行了写操作,而没有进行同步操作。这种情况下,由于线程执行的顺序是不确定的,可能会导致不可预测的结果。 在Golang中,数据竞态是一种常见的并发编程错误,可能导致程序的行为不正确或崩溃。 如何检测数据竞态? G…

    other 2023年7月29日
    00
  • C#特性 匿名类型与隐式类型局部变量使用介绍

    匿名类型和隐式类型局部变量是C#语言中的特性。以下是一个完整的攻略,介绍了匿名类型和隐式类型局部变量的使用,包括两个示例说明。 匿名类型的使用 匿名类型是一种临时创建的只读类型,用于存储一组相关的属性值。它在编译时动态生成,并且没有明确的类型名称。以下是匿名类型的使用示例: var person = new { Name = \"John\&quo…

    other 2023年8月15日
    00
  • Python如何将模块打包并发布

    当我们开发出一个Python模块并想要分享给其他人使用时,我们需要将其打包成一个发布版本。本文将介绍如何使用Python内置的工具和第三方库来打包和发布Python模块。 1. 安装setuptools setuptools 是一个 Python 包的管理工具,它可以用于创建、构建、安装 Python 包。我们可以通过以下命令安装setuptools: pi…

    other 2023年6月25日
    00
  • hex文件解析

    Hex文件解析攻略 Hex文件是一种十六进制格式的文件,通常用于将二进制数据转换为可读的文本格式。在嵌入式系统中,Hex文件通常用于将程序代码和数据到微控制器中。本攻略将详细介绍Hex文件的结构和解析方法,并提供两个示例说明。 Hex文件结构 Hex文件由多个记录组成,每个记录包含以下字段: 起始符:一个冒号(:)字符。 字节数:一个表示中数据字节数的两位十…

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