vue3 axios 实现自动化api配置详解

Vue3 Axios 实现自动化 API 配置详解

背景

在Vue项目中,我们经常需要向后端API接口发起请求来获取数据或者提交表单。Axios是一种流行的基于Promise的HTTP库,它可以帮助我们在Vue中发起请求。

当项目较大时,我们需要管理大量的API请求,每个API都有不同的地址、请求方式、请求参数等。因此,我们需要对Axios进行封装,以便于在项目中统一管理API请求。本攻略将详细讲解如何在Vue3项目中使用Axios并自动化配置API。

环境准备

在Vue3项目中使用Axios需要安装axios库,可以通过npm进行安装:

npm install axios

Axios封装

为了方便管理API请求,我们需要对Axios进行封装。具体来说,我们需要实现以下功能:

  • 创建Axios实例
  • 记录请求的时间
  • 自动添加Authorization头信息
  • 自动转换请求参数或响应数据
  • 处理请求错误
import axios from 'axios';

// 创建axios实例
const service = axios.create({
  baseURL: process.env.BASE_API_URL,
  timeout: 5000,
});

// 记录请求的开始时间
service.interceptors.request.use(config => {
  config.startTime = new Date().getTime();
  return config;
}, error => {
  console.error(error);
  return Promise.reject(error);
});

// 添加Authorization头信息
service.interceptors.request.use(config => {
  if (localStorage.getItem('token')) {
    config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
  }
  return config;
}, error => {
  console.error(error);
  return Promise.reject(error);
});

// 自动转换请求参数或响应数据
service.interceptors.request.use(config => {
  if (config.method === 'post') {
    const contentType = config.headers['Content-Type'];
    if (contentType && contentType.startsWith('application/x-www-form-urlencoded')) {
      config.transformRequest = [function (data) {
        let ret = '';
        for (let it in data) {
          ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
        }
        return ret.slice(0, -1);
      }];
    } else if (contentType && contentType.startsWith('application/json')) {
      config.transformRequest = [function (data) {
        return JSON.stringify(data);
      }];
    }
  }
  return config;
}, error => {
  console.error(error);
  return Promise.reject(error);
});

service.interceptors.response.use(response => {
  const endTime = new Date().getTime();
  response.duration = endTime - response.config.startTime;
  return response.data;
}, error => {
  console.error(error);
  return Promise.reject(error);
});

export default service;

以上代码中,我们创建了一个名为service的Axios实例,并对其添加了请求拦截器和响应拦截器。这些拦截器可以实现自动添加Authorization头信息、记录请求时间等功能。在出现请求错误时,我们通过reject()函数把错误传递给调用方。

API 配置自动化

当我们有很多的API请求需要管理时,我们可以通过自动化配置从而减轻手动配置的工作量。我们可以为每个API请求定义一个配置项,其中包含请求的地址、请求方式、请求参数等信息。然后,我们可以通过读取这些配置项自动化生成API请求。

import axios from './axios.js';

const apiConfigs = [
  {url: '/users/', method: 'get'},
  {url: '/users/', method: 'post'},
];

const apis = {};

apiConfigs.forEach(config => {
  const {url, method} = config;
  apis[`${method}${url}`] = (data) => {
    return axios({
        method,
        url,
        data,
      });
  };
});

export default apis;

以上代码中,我们定义了一个名为apiConfigs的数组,其中包含不同的API请求配置项。对于每个配置项,我们将其方法和URL结合起来作为键名,然后将方法封装到apis对象中。通过这种方式,我们可以通过访问apis对象来调用任意API请求。

示例说明

示例1:获取用户信息

对于一个获取用户信息的API请求,我们可以通过以下方式来自动生成API:

{
  url: '/users/',
  method: 'get',
}

我们仅需要在apiConfigs数组中添加上述配置,然后即可通过以下代码来访问API:

import apis from './apis.js';

apis.get/users/().then(res => {
  console.log(res);
});

示例2:创建用户

对于一个创建用户的API请求,我们可以通过以下方式来自动生成API:

{
  url: '/users/',
  method: 'post',
}

我们同样只需要将上述配置添加到apiConfigs数组中并将数据传递给api即可:

import apis from './apis.js';

const data = {
  name: 'Tom',
  age: 20,
};

apis.post/users/().then(res => {
  console.log(res);
});

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3 axios 实现自动化api配置详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue实现单点登录的方式汇总

    下面是“Vue实现单点登录的方式汇总”的完整攻略。 概述 单点登录(Single Sign-On,简称SSO)是一种授权机制,允许用户使用一组凭证登录到多个相关但相互独立的软件系统中,而不需要多次输入身份验证信息。这在大型企业或者多个系统共存的情况下非常常见。 Vue框架作为目前最为流行的前端框架之一,在实现单点登录方面也提供了多种解决方案。本篇文章将会介绍…

    Vue 2023年5月28日
    00
  • vue实现文件上传功能

    下面我将详细介绍如何使用Vue实现文件上传功能,过程中将包含两个示例。 一、准备工作 1. 安装依赖 首先需要安装axios和qs这两个依赖。axios是一个基于promise的HTTP请求库,可以用于浏览器和Node.js,而qs是用于解析和格式化查询字符串的工具。 npm install axios qs 2. 配置请求头 当我们进行文件上传时,需要将请…

    Vue 2023年5月28日
    00
  • vue数字类型过滤器的示例代码

    下面是关于Vue数字类型过滤器的示例代码攻略。 什么是Vue数字类型过滤器? Vue数字类型过滤器是一种可以用来格式化数字的针对Vue的特殊标签。它可以使数字看起来更清晰易读,便于用户查看。 示例一:货币符号格式化 当我们需要将一个数字格式化成货币的形式时,可以通过使用Vue数字类型过滤器来实现这一目的。下面是一个带有货币符号的数字类型过滤器的示例代码: &…

    Vue 2023年5月29日
    00
  • 解析Vue2 dist 目录下各个文件的区别

    Vue2 是一款流行的 JavaScript 前端框架,它的 dist 目录下包含了多个文件,每个文件都有自己的职责和用途。下面我将详细讲解 Vue2 dist 目录下各个文件的区别。 vue.js vue.js 文件是最基本的 Vue2 库文件,包含了 Vue 的核心代码和各种插件。如果你只想使用 Vue 就可以将这个文件添加到你的 HTML 文件中,然后…

    Vue 2023年5月28日
    00
  • Vue实现输入框回车发送和粘贴文本与图片功能

    下面是Vue实现输入框回车发送和粘贴文本与图片功能的完整攻略。 步骤一:引入依赖 在Vue项目中引入vue-clipboard2和vue-filepond这两个库。 npm install vue-clipboard2 vue-filepond 步骤二:注册组件和事件 <template> <div> <input type=&…

    Vue 2023年5月27日
    00
  • Vue3响应式对象Reactive和Ref的用法解读

    Vue3响应式对象Reactive和Ref的用法解读 什么是Vue3的响应式对象? Vue3中的响应式对象是指一种特殊的JavaScript对象,它可以被Vue3追踪其变化并进行响应式渲染。在Vue2中,响应式数据的实现是通过ES5提供的Object.defineProperty()方法来实现的,而在Vue3中,响应式数据的实现则是依赖于ES6中的Proxy…

    Vue 2023年5月28日
    00
  • vue之elementUi的el-select同时获取value和label的三种方式

    让我们来详细讲解一下“Vue之Element UI的el-select同时获取value和label的三种方式”的完整攻略。 介绍 在 Vue 中使用 Element UI 的 el-select 组件时,有时候我们需要同时获取到选中的 value 和 label 值,这时候就需要用到一些技巧来实现这个需求。在本文中,我将为大家介绍三种方式来同时获取 el-…

    Vue 2023年5月27日
    00
  • 一篇文章让你看懂封装Axios

    我来为你讲解。 一篇文章让你看懂封装 Axios – 完整攻略 前言 Axios 是一个基于 promise 的 HTTP 请求库,可以用于浏览器以及 Node.js 环境中。由于 Axios 功能强大,使用简单便捷,因此被广泛用作前后端交互的请求库。但是,如果每个请求都是单独的一个函数去处理的,那么代码会变得很冗长,不易维护。因此我们需要封装 Axios。…

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