vue 项目封装 axios 的 HTTP 请求

在介绍如何封装 axios 的 http 请求之前,我们先来了解下什么是 axios。

axios 是通过 promise 实现对 ajax 技术 的一种封装,就像 jQuery 实现 ajax 封装一样。

简单来说,ajax 技术实现了网页的局部数据刷新,axios 实现了对 ajax 的封装。

平时开发 vue 项目时,不同模块都会使用 axios 请求后台的接口,代码如下:

this.$axios({
  method: "POST",
  url: "接口地址",
  params: {
    参数名1:"参数值1",
    参数名2:"参数值2"
  }
}).then(res => {
  // 请求成功
}).catch(error=>{
  // 请求失败
});

当请求的接口越来越多时,就会发现写了很多的重复代码,不太利于维护。如果需要使用统一的过滤规则,比如实现超时退出,就需要修改每一个请求的代码,非常麻烦。

因此,我们可以封装一个全局的HTTP请求,来统一管理后台接口,封装步骤如下:

一. 使用 Promise 封装 HTTP 请求

首先在 src 的 util 文件夹下新建 http.js,使用 Promise 代替回调函数封装 HTTP 请求:

在这里插入图片描述


http.js 代码

import axios from "axios";
var HttpRequest = {
  getRequest({ url, data = {}, method = "GET" }) {
    return new Promise((resolve, reject) => {
      this._getRequest(url, resolve, reject, data, method);
    });
  },
  _getRequest: function(url, method = "GET") {
    let format = method.toLocaleLowerCase() ==='get'?'params':'data';
    axios({
      url: url,
      method: method,
      [format]: data,
      header: {
        "content-type": "application/json"
      }
    }).then(res => {
      if (res.code == 200) {
        resolve(res);
      } else if (res.code == 403) {
      	// 如果接口返回 403,进行登录超时处理
      }
    }).catch(() => {
      // 异常处理
      reject();
    })
  }
};
export { HttpRequest };

二. 创建统一管理 API

在 src 的 service 文件夹下新建 auth.js,用于统一管理项目中的权限相关请求:

在这里插入图片描述


auth.js 代码

import { HttpRequest } from "../util/http";

let Auth = {
  // 判断用户名称重复
  checkUsername: function(data) {
    return HttpRequest.getRequest({
      method: "GET",
      url: "/api/user/checkUsername",
      data: data
    });
  },
  // 用户注册
  register: function(data) {
    return HttpRequest.getRequest({
      method: "POST",
      url: "/api/user/register",
  // 获取用户信息
  getUserInfo: function(data) {
    return HttpRequest.getRequest({
      method: "GET",
      url: "/api/auth/user/getUserInfo",
  // 编辑用户信息
  editUser: function(data) {
    return HttpRequest.getRequest({
      method: "POST",
      url: "/api/auth/user/editUser",
      data: data
    });
  }
};
export {Auth};

三. 调用API

在需要进行权限请求的地方调用对应的API:

在这里插入图片描述


导入 API :

import { Auth } from "../service/auth.js";

在方法中实现:

let data = {
    username: this.username
};
Auth.checkUsername(data).then(response = > {
    if (response.data.code == 200) {
        // 用户名重复的对应处理
    } else {
        // 未重复的对应处理
    }
});

欢迎关注我的公众号,用讲故事的方式学技术。

这里有脑洞大开的奇葩故事,也有温暖文艺的心灵感悟。

技术知识,也可以很有趣。

在这里插入图片描述

相关文章

https://segmentfault.com/a/1190000022018995 https://www....
ES6 (ECMAScript 6)中的模块是一个包含 JavaScript 代码的...
from https://mp.weixin.qq.com/s/-rc1lYYlsfx-wR4mQmIIQQ V...
D:\Temp>npm init vite@latest vue3study --temp...
文章浏览阅读1.2k次。最近自己从零撸起的甘特图组件需要子组...
文章浏览阅读3.3k次,点赞3次,收藏16次。静默打印是什么?简...