vue3.2+ts封装axios

2023-09-14 09:31:32

1.创建utils文件夹/server下面创建index.ts,代码如下:

import axios, { AxiosRequestConfig } from "axios";

import { BASE_URL, TIMEOUT } from "@/config/axios";
/**
 * @说明 接口请求返回信息 (按照自己的实际情况分配基础请求格式)
 */
// export interface requestReturnType<T = any> {
//   /**
//    * @说明 返回code状态码
//    */
//   code: number;
//   /**
//    * @说明 返回错误code状态码
//    */
//   errcode?: number;
//   /**
//    * @说明 返回信息说明
//    */
//   msg: string;
//   /**
//    * @说明 返回总体数据
//    */
//   data: T;
//   /**
//    * @说明 返回请求成功是否
//    */
//   success: boolean | null;
// }

export interface requestReturnType<T = any> {
  /**
   * @说明 返回code状态码
   */
  code: number;
  /** 数据内容 */
  content: T;
}

/** 创建axios实例 */
const instance = axios.create({
  timeout: TIMEOUT, // 超时时间
  //   baseURL: BASE_URL,
  headers: {
    "Content-Type": "application/json",
  },
});

/** 添加请求拦截 */
instance.interceptors.request.use(
  (config) => {
    console.log("config", config);
    // if (config.showLoading) {
    //   showFullScreenLoading()
    // }
    // let token = localStorage.getItem("x-auth-token");
    // if (token) {
    //添加请求头
    //config.headers["Authorization"]="Bearer "+ token
    // }
    /** 请求拦截-可做网络加载开始动作 */
    // ...
    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);

/**  响应拦截 */
instance.interceptors.response.use(
  (response) => {
    // if (response.config.showLoading) {
    //   tryHideFullScreenLoading()
    // }
    /** 响应拦截-可做网络加载完成动作 */
    // ...
    return response;
  },
  (error) => {
    // tryHideFullScreenLoading()
    console.log(`error:`, error);
    if (error && error.response) {
      switch (error.response.status) {
        case 400:
          error.message = "错误请求";
          break;
        case 401:
          error.message = "未授权,请重新登录";
          break;
        case 403:
          error.message = "拒绝访问";
          break;
        case 404:
          error.message = "请求错误,未找到该资源";
          break;
        case 405:
          error.message = "请求方法未允许";
          break;
        case 408:
          error.message = "请求超时";
          break;
        case 500:
          error.message = "服务器端出错";
          break;
        case 501:
          error.message = "网络未实现";
          break;
        case 502:
          error.message = "网络错误";
          break;
        case 503:
          error.message = "服务不可用";
          break;
        case 504:
          error.message = "网络超时";
          break;
        case 505:
          error.message = "http版本不支持该请求";
          break;
        default:
          error.message = `连接错误${error.response.status}`;
      }
    } else {
      error.message = "连接到服务器失败";
    }
    /** 错误逻辑处理,此处可在页面弹框处理 */
    // ...
    return Promise.reject(error.message);
  }
);
/** 代理请求 */
// 注意此处的泛型T,默认值时any;兼容未提供指定类型的方式
async function httpProxy<T = any>(
  config: AxiosRequestConfig
): Promise<requestReturnType<T>> {
  let resData = await instance(config);
  return resData.data;
}

export default httpProxy;

2.创建api文件夹(里面存放所有接口)ceshi.ts

import httpProxy from "@/utils/server"; // 拿到我们刚封装的axios
import { URL } from "@/config/axios"; // 根据环境变量拿到的域名服务地址
/** 导入接口返回类型 */
import { qinghuaType, testType } from "./types/ceshi";

/** 请求接口:情话 
 ** 接口地址:https://api.uomg.com/api/rand.qinghua
 ** 返回格式:json/html
 ** 请求方式:get/post
 ** 请求示例:https://api.uomg.com/api/rand.qinghua?format=json
 ** 请求参数说明:

 ** 名称	必填	类型	说明
 **  format	否	string	选择输出格式[json|text|js]
 ** 返回参数说明:
 **
 ** 名称	类型	说明
  **  code	string	返回的状态码
  **  content	string	返回文本信息
  **  msg	string	返回错误提示信息!
 * 
*/

// 参数泛型 <T extends Record<string, any>>  表示,给我的参数类型,必须约束于对象形式 即{key:value,...}模式,key类型string,value类型为any   &&&&&  可根据实际情况变更此params类型
export async function getQingHua<T extends Record<string, any>>(
  params: T | undefined
) {
  /** @qinghuaType 返回台参数类型 */
  return await httpProxy({
    url: URL + "/users",
    method: "GET",
    params,
  });
}

export async function ceshi<T extends Record<string, any>>(
  data: T | undefined,
  data1: T
) {
  /** @testType 返回参数类型 */
  return await httpProxy({
    url: URL + "/rand.qinghua",
    method: "POST",
    data: {
      data,
      data1,
    },
  });
}

3.页面使用

import { getQingHua, ceshi } from "@/api/ceshi/ceshi";



const add = async () => {
  const a = await getQingHua({ format: "json" });
  console.log(a);
};

更多推荐

如何快速检测代理IP质量?

一直以来,IP代理都是出海跨境业务的刚需。质量好的IP代理,除了在跨境业务产生巨大作用,在SEO监控、爬虫抓取、市场研究等领域也发挥着很大的作用。但是,对于IP代理的质量检测是我们选择高标准IP代理的一句,我们一般都会建议在使用IP代理前,进行测试或检测。那么我们应该如何快速地检测代理IP的有效性与质量的好坏呢?接下来

第三章 关系数据库标准语言SQL

第三章关系数据库标准语言SQL3.1SQL概述3.1.1SQL的产生与发展3.1.2SQL的特点主要特点:综合统一集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)的功能于一体}数据操作统一可以独立完成数据库生命周期中的全部活动,包括以下一系列操作要求:定义和修改、删除关系模式,定义和删除视图,插

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

日志输出-查看 SQL:深入分析 MyBatis 执行过程

😀前言在现代软件开发中,数据库操作是不可或缺的一部分,而持久层框架的应用能够极大地简化这一过程。然而,当我们在开发MyBatis程序时,有时候需要深入了解程序底层实际执行的SQL语句,以便更好地分析和优化数据库操作。本文将探讨如何通过配置日志输出,在MyBatis中查看SQL语句的执行情况,以便更深入地了解其执行过程

逻辑回归中对L1\L2正则化的理解

在逻辑回归中,L1和L2正则化是常用的正则化技术,用于控制模型的复杂度并防止过拟合。它们通过在损失函数中引入额外的正则化项来实现。L1正则化(Lasso正则化):L1正则化使用参数权重的绝对值之和作为正则化项。其目标是将一些权重压缩为零,从而实现特征选择的效果。L1正则化的数学形式如下:R(w)=λ∑i=1n∣wi∣\

英语CN专刊《英语教师》简介及投稿须知

英语CN专刊《英语教师》简介及投稿须知《英语教师》杂志是由中华人民共和国新闻出版总署、正式批准公开发行的优秀期刊,《英语教师》系一本面向基础教育和高等教育英语教师的、兼顾理论性与实践性的专业性期刊。《英语教师》的读者对象主要是广大英语教师、英语教研员以及高校外语院系学生。本刊主要刊载有关英语教学和英语教师教育的论文、实

Linux 系统移植(二)--系统调试

文章目录一、编译文件系统1.1下载资源安装包1.2配置模板ARM64目标平台1.3配置交叉编译器1.4配置登录用户名和密码1.5配置Linux控制台1.6配置文件系统格式1.7编译buildroot文件系统二、编译ARM64Linux三、启动QemuLinux系统参考链接:一、编译文件系统1.1下载资源安装包我们使用b

(日积月累版)大数据基础知识点1-关系型数据库

好久不见,甚是想念。笔者最近有时间整理关于大数据的一些基础知识点,整理的目不在于能提升多少技能,关键在于巩固一些很基础的知识点,毕竟互联网就是基础略稳固的人比较有优势,在遇到或发现一些技术问题时,从底层科学的去理解这些问题,说不定会有另一片天下。那么本期带来大数据面是:关系型数据库一、什么是关系型数据库?关系型数据库是

全国职业技能大赛云计算--高职组赛题卷④(私有云)

全国职业技能大赛云计算--高职组赛题卷④(私有云)第一场次题目:OpenStack平台部署与运维任务1基础运维任务(5分)任务3OpenStack云平台运维(15分)任务4OpenStack云平台运维开发(15分,本任务只公布考试范围,不公布赛题)需要环境私信博主!!!第一场次题目:OpenStack平台部署与运维某企

2023,DaaS驶入“AI大航海时代”

2023,“制胜”已然成为所有行业、企业的共同命题,随着数字化行至中程,数据壁垒逐渐被打破,DaaS作为企业增长问题的解法,再次被看到。作者|斗斗编辑|皮爷出品|产业家2002年,在竞争激烈的美国职业棒球联盟,奥克兰运动家队无论在人员和物质配备以及资金实力上都只是“下三流”之列。然而在数据分析高材生的帮助下,经过分析数

RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133022813红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

热文推荐