JS中封装axios来管控api的2种方式

在JS中,使用axios作为网络请求库是非常常见的。在实际应用中,我们需要封装axios来管理API,以便于维护和升级。这里介绍两种常见的封装axios的方式。

方式一:基于axios.create()方法

通过axios.create()方法创建一个新的axios实例,然后在这个实例中设置一些统一的请求头、请求拦截器和响应拦截器等。示例代码如下:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

instance.interceptors.request.use(config => {
  // 在发送请求之前做些什么
  return config;
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error);
});

instance.interceptors.response.use(response => {
  // 对响应数据做点什么
  return response;
}, error => {
  // 对响应错误做点什么
  return Promise.reject(error);
});

export default instance;

在这个实例中,我们设置了基本的服务器地址、超时时间和请求头信息,并且增加了请求拦截器和响应拦截器,可以方便地在请求和响应前后执行相关操作,比如在请求头中添加token等。

我们可以在应用中直接使用这个实例的get、post等方法,例如:

import instance from './api-instance';

instance.get('/user', {
  params: {
    id: 12345
  }
}).then(response => {
  // 处理响应结果
}).catch(error => {
  // 处理请求错误
});

方式二:创建一个API管理类

创建一个API类,然后在这个类中定义各个API的请求方式、URL、请求参数、响应参数等信息,并为这些API创建一个统一的请求方法。示例代码如下:

import axios from 'axios';

class Api {
  constructor() {
    this._baseUrl = 'https://api.example.com';
    this._timeout = 10000;
    this._headers = {
      'Content-Type': 'application/json'
    };
    this._http = axios.create({
      baseURL: this._baseUrl,
      timeout: this._timeout,
      headers: this._headers
    });
    this._http.interceptors.request.use(config => {
      // 在发送请求之前做些什么
      return config;
    }, error => {
      // 对请求错误做些什么
      return Promise.reject(error);
    });
    this._http.interceptors.response.use(response => {
      // 对响应数据做点什么
      return response.data;
    }, error => {
      // 对响应错误做点什么
      return Promise.reject(error);
    });
    this._apiMap = {
      getUser: {
        url: '/user',
        method: 'get',
        params: ['id']
      },
      postUser: {
        url: '/user',
        method: 'post',
        data: ['name', 'age']
      }
    };
  }

  call(apiName, data = {}) {
    const apiInfo = this._apiMap[apiName];
    if (!apiInfo) {
      console.error(`API ${apiName} not found`);
      return;
    }
    const {url, method, params = [], data: dataKeys = []} = apiInfo;
    const requestData = {};
    params.forEach(paramKey => {
      requestData[paramKey] = data[paramKey];
    });
    const postData = {};
    dataKeys.forEach(dataKey => {
      postData[dataKey] = data[dataKey];
    });
    if (method === 'get') {
      return this._http.get(url, {
        params: requestData
      });
    } else if (method === 'post') {
      return this._http.post(url, postData);
    } else {
      return Promise.reject(`unsupported request method ${method}`);
    }
  }
}

export default new Api();

在这个类中,我们创建了一个_http对象,并为它设置了基本的服务器地址、超时时间和请求头信息,并且增加了请求拦截器和响应拦截器,与之前的方法相似。另外,我们在类中定义了一个apiMap对象,其中包含了我们所有API的请求方式、URL、请求参数、响应参数等信息。最后,我们定义了一个call方法,用于根据apiMap中的信息来发出请求并返回响应。

我们可以在应用中直接使用这个APi类的call方法,例如:

import api from './api';

api.call('getUser', {
  id: 12345
}).then(response => {
  // 处理响应结果
}).catch(error => {
  // 处理请求错误
});

这样就可以方便地管理和调用所有API,并且在后续的维护和升级中也会更加便捷。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中封装axios来管控api的2种方式 - Python技术站

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

相关文章

  • js 一个关于图片onload加载的事

    下面是关于“js 一个关于图片onload加载的事”的完整攻略。 什么是图片的onload事件 在 JavaScript 中,当图片被成功加载后,触发其 onload 事件。这个事件通常被用来检测图片是否已经加载完成,以便后面的操作依赖于该图片的尺寸和属性。 如何使用图片的onload事件 JavaScript 的 Image 对象提供了一个 onload …

    other 2023年6月25日
    00
  • Windows7更新补丁KB4022719下载地址 (附KB4022719补丁修复更新内容) 32位/64位

    Windows 7 更新补丁 KB4022719 下载地址 (附 KB4022719 补丁修复更新内容) 32 位/64 位攻略 1. 简介 Windows 7 更新补丁 KB4022719 是微软发布的一个重要安全补丁,用于修复系统中的漏洞和提升系统的稳定性。本攻略将详细介绍如何下载和安装该补丁,并提供一些示例说明。 2. 下载地址 你可以从微软官方网站下…

    other 2023年7月28日
    00
  • mybatis笔记

    以下是“MyBatis笔记的完整攻略”的详细说明,包括过程中的两个示例说明。 MyBatis笔记的完整攻略 MyBatis是一款优秀的持久层框架,它可以帮助我们简化数据库操作。在使用MyBatis时,我们可以使用XML或注解来配置SQL语句。以下是一份关于MyBatis笔记的完整攻略。 1. MyBatis基础知识 在开始使用MyBatis之前,我们需要掌握…

    other 2023年5月10日
    00
  • 图片加载进度实时显示

    一、概述 在网页中加载图片是很常见的场景,但一些大图片、网络延迟等因素都会导致图片加载时间延长。在用户等待图片加载时,为了提升用户体验,可以通过实时显示图片加载进度来让用户了解当前图片加载的进度,从而缓解用户的焦虑感和等待时间。本文将详细介绍如何实现图片加载进度实时显示的功能。 二、实现方式 实时显示图片加载进度的方式一般有两种,分别是:使用canvas绘制…

    other 2023年6月25日
    00
  • 服务名无效。请键入nethelpmsg2185以获得更多的帮助。

    以下是详细讲解“服务名无效。请键入nethelpmsg2185以获得更多的帮助。”的完整攻略: 服务名无效。请键入nelpmsg2185以获得更多的帮助。 当在Windows系统中启动或停止服务时,可能会遇到“服务名无效。请入nethelpmsg2185以获得更多的帮助。”的错误提示。本攻略将介绍如何解决这个问题。 步骤一:检查服务名是否正确 首先需要检查服…

    other 2023年5月10日
    00
  • 简析Win8下虚拟内存的必要性

    简析Win8下虚拟内存的必要性攻略 什么是虚拟内存? 虚拟内存是计算机操作系统中的一种技术,它允许将硬盘空间用作内存的扩展,以便处理大量的数据和程序。在Windows 8操作系统中,虚拟内存的设置对于系统的性能和稳定性至关重要。 为什么需要虚拟内存? 扩展内存容量:虚拟内存允许系统使用硬盘空间作为额外的内存,从而扩展了计算机的可用内存容量。这对于那些需要同时…

    other 2023年8月1日
    00
  • 手机QQ6.0体验版下载地址 手机QQ6.0苹果安卓用户报名地址

    手机QQ6.0体验版下载地址 手机QQ6.0体验版是一款最新的QQ版本,提供了更多的功能和改进。以下是获取手机QQ6.0体验版的详细攻略。 步骤一:报名参与体验 首先,你需要报名参与手机QQ6.0体验版的测试。请按照以下步骤进行: 打开手机QQ官方网站或者QQ官方应用。 在首页或者菜单中找到“体验版”或者“测试版”选项。 点击进入体验版页面。 在页面中找到“…

    other 2023年8月4日
    00
  • QSS样式表实现界面换肤功能

    QSS是Qt Style Sheet的缩写,是一种类似于CSS的样式表语言,可以用于美化Qt应用程序的界面,其中包括实现界面换肤功能。 以下是QSS样式表实现界面换肤功能的完整攻略: 1.创建样式表文件 首先,需要在项目中创建一个样式表文件,例如“style.qss”。该文件中可以定义一些QSS代码,用于改变应用程序的颜色、字体、边框、背景等样式。 2.加载…

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