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

下面介绍一下“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日

相关文章

  • 编程之显示/隐式声明

    编程之显示/隐式声明攻略 在编程中,声明是指为变量或函数分配内存空间并指定其类型和名称的过程。显示声明是明确地指定变量或函数的类型和名称,而隐式声明是根据上下文推断变量或函数的类型。 显示声明 显示声明是通过使用关键字来明确指定变量或函数的类型和名称。以下是一些常见的显示声明的示例: 显示声明变量 # 显示声明整数变量 num1: int = 10 # 显示…

    other 2023年8月16日
    00
  • Powershell小技巧之判断是否包涵大小写

    PowerShell小技巧之判断是否包含大小写 在PowerShell中,我们可以使用一些技巧来判断一个字符串是否包含大小写。下面是一个完整的攻略,其中包含两个示例说明。 方法一:使用正则表达式 我们可以使用正则表达式来判断一个字符串是否包含大小写。下面是一个示例代码: $pattern = \"[A-Z]\" $string = \&q…

    other 2023年8月18日
    00
  • jQuery EasyUI基础教程之EasyUI常用组件(推荐)

    标题:jQuery EasyUI基础教程之EasyUI常用组件(推荐) 一、EasyUI常用组件介绍 EasyUI是一款基于jQuery的UI插件库,提供了很多易于使用的界面组件,可以快速地构建出美观、易用的Web界面。EasyUI包含许多常用的用户界面组件,包括弹窗、数据列表、表格、表单、菜单等。 二、EasyUI常用组件示例展示 1. 弹窗组件 弹窗组件…

    other 2023年6月26日
    00
  • Python3 模块、包调用&路径详解

    Python3 模块、包调用&路径详解 在Python3中,我们可以使用模块和包来组织和管理代码。以下是模块和包的调用和路径详解: 模块调用 要调用一个模块,我们可以使用import语句,后跟模块的名称。以下是模块调用的示例: import math result = math.sqrt(16) print(result) 在上述示例中,我们使用im…

    other 2023年10月13日
    00
  • C++中的string类型

    C++中的string类型是一种常用的字符串类型,相比于传统的以字符数组为基础实现的字符串,它可以更方便地进行字符串操作,并且在一些情况下也更为高效。 创建和初始化string对象 在使用string类型时,我们可以使用以下方法来创建和初始化string对象: 直接初始化 我们可以使用双引号”或者单引号’将一个字符串常量初始化为一个string对象,例如: …

    other 2023年6月26日
    00
  • Android带进度条的下载图片示例(AsyncTask异步任务)

    Android带进度条的下载图片示例(AsyncTask异步任务) 在Android开发中,我们经常需要在后台进行一些耗时的操作,例如下载图片。为了避免阻塞主线程,我们可以使用AsyncTask异步任务来执行这些操作,并通过进度条来显示下载进度。下面是一个完整的示例攻略,包含两个示例说明。 示例一:使用AsyncTask下载图片并显示进度条 首先,我们需要在…

    other 2023年9月7日
    00
  • intellijidea大小写转换快捷键

    IntelliJ IDEA 是一款比较流行的 Java IDE,提供了多种方便的快捷键,在编辑 Java 代码时能够大大提高效率。其中,大小写转换快捷键是比较实用的一个,特别是在重构函数名或更改变量名称时。 以下是在 IntelliJ IDEA 中进行大小写转换的完整攻略: 1. 转换首字母大小写 将 Java 类名、接口名、变量名的首字母转换为大写: 快捷…

    其他 2023年4月16日
    00
  • Android BannerView通用封装详解

    Android BannerView通用封装详解 概述 BannerView 是一种常见的 Android 控件,它可以轮播显示一组图片或文本。为了方便开发者使用,我们可以对 BannerView 进行封装,实现通用的轮播控件,方便在不同的项目中使用。 本文将详细介绍如何封装一个 Android BannerView,并提供两个示例说明。 实现 布局文件 首…

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