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.js 中的 *.Vue文件

    初识 Vue.js 中的 .vue 文件 在 Vue.js 中,.vue 文件是一个自定义的单文件组件(Single-File Component),可以将 HTML、CSS 和 JavaScript 集中到一个 .vue 文件中,并进行组件化开发。 一个 .vue 文件一般包含三部分:template(模板)、script(脚本)和 style(样式),它…

    Vue 2023年5月28日
    00
  • JS 图片压缩原理与实现方法详解

    JS 图片压缩原理与实现方法详解 原理介绍 图片压缩是指在保证图片质量的前提下,通过降低图片的分辨率、压缩比率等方式来减小图片的体积,从而达到优化页面加载速度的目的。在网页中,对于图片的大小不同,会直接影响页面的加载速度,特别是对于移动端的用户体验更加重要。 在实现 JavaScript 图片压缩的时候,常见的有两种方式: HTML5 的 Canvas + …

    Vue 2023年5月28日
    00
  • web worker在项目中的使用学习为项目增加亮点

    下面我来详细讲解一下在项目中使用Web Worker,并给出两个示例说明。 1.什么是Web Worker Web Worker是HTML5提供的一个API,可以在浏览器后台线程中执行JavaScript脚本,使浏览器UI线程不受阻塞,提高了网页的响应速度。 2.在项目中为什么使用Web Worker Web Worker可以提高页面的响应速度,降低了网站的…

    Vue 2023年5月28日
    00
  • vite + electron-builder 打包配置详解

    下面我将为您详细讲解“vite + electron-builder 打包配置详解”的完整攻略。 1. 准备工作 我们首先需要安装 node.js 和 npm,以便我们使用 viter 和 electron-builder。 2. 创建项目 我们使用 vite 创建一个新项目。在命令行中执行以下命令: npm init vite-app my-electro…

    Vue 2023年5月27日
    00
  • vue动态绑定ref(使用变量)以及获取方式

    在Vue中,我们经常需要对DOM元素进行操作,比如获取dom元素的数值或进行样式改变,这时我们就需要获取到DOM元素的引用。Vue提供了ref属性,可以用来获取dom元素的引用。本文将详细介绍如何使用动态绑定ref以及获取dom元素的方法。 动态绑定ref Vue的ref属性可以绑定到元素身上,当元素渲染后,这个元素会挂载到vm.$refs或this.$re…

    Vue 2023年5月27日
    00
  • 如何在vue3.0+中使用tinymce及实现多图上传文件上传公式编辑功能

    下面我为你详细讲解如何在Vue 3.0+中使用TinyMCE并实现多图上传、文件上传、公式编辑等功能。 准备工作 首先,我们需要安装@tinymce/tinymce-vue插件: npm install –save @tinymce/tinymce-vue 然后,我们需要在Vue项目的main.js中引入@tinymce/tinymce样式文件: impo…

    Vue 2023年5月27日
    00
  • 详解实现vue的数据响应式原理

    下面将详细讲解实现Vue数据响应式原理的完整攻略。内容将按照以下顺序展开: 理解Vue数据响应式原理的基本概念和实现原理 实现一个简单的数据响应式库 使用示例对实现过程进行说明 1. Vue数据响应式原理的基本概念和实现原理 Vue的数据响应式原理是指,当一个Vue组件的数据发生变化时,视图会自动重新渲染。这种自动重新渲染的机制是Vue框架提供的,在我们使用…

    Vue 2023年5月29日
    00
  • 基于vue-video-player自定义播放器的方法

    下面是“基于vue-video-player自定义播放器的方法”的完整攻略: 1. vue-video-player介绍 vue-video-player是一款基于vue.js和video.js的HTML5视频播放器组件,提供了丰富的功能和样式,而且易于定制。要在自己的网站上使用vue-video-player,我们只需要通过npm安装该组件,然后在Vue应…

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