当前位置: 首页 > news >正文

axios+ts封装

http.ts

import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import qs from 'qs'/*** 扩展AxiosRequestConfig,增加一些自定义的属性* isAuth: 自定义的参数中,用来判断是否携带token  因为AxiosRequestConfig本身定义的有 auth 所以这里使用 isAuth;*/
interface AxiosRequestConfigExt extends AxiosRequestConfig {isAuth?: boolean //是否携带tokenshowLoading?: boolean //是否显示加载框error401toLogin?: boolean //是否将401错误重定向到登录页面dataType?: string //数据类型queryData: any //查询参数
}let timerId: number = 0class Http {axios: AxiosInstance = nullconstructor() {this.axios = axios.create({baseURL: 'http://localhost:5173',timeout: 10000,})//请求拦截器this.axios.interceptors.request.use((config: AxiosRequestConfig): AxiosRequestConfig => {return config},(error: any) => {console.log(error)return Promise.reject(error)},)//响应拦截器this.axios.interceptors.response.use((response: AxiosResponse) => {return response.data},(error: any) => {console.log(error)let message = '网络错误'if (error.response.status === 401) {message = '未登录或登录已过期,请重新登录'// 这里可以重定向到登录页面window.location.href = '/login'}if (error.response.status === 403) {message = '权限不足,请联系管理员'}if (error.response.status === 404) {message = '请求地址不存在'}if (error.response.status === 500) {message = '服务器内部错误'}console.log(message)//弹出提示框//showToast(message)return Promise.reject(error)},)}request<T>(config: AxiosRequestConfigExt): Promise<T> {let {url,queryData = {},isAuth = false,showLoading = false,method = 'GET',dataType = 'json',} = configif (showLoading) {//显示加载框 //如果请求的响应时间小于200毫秒 则不显示加载框//因为 timerid 是一个全局变量,所以每次请求都会覆盖之前的定时器//如果请求都比较快的话,只有最后一次请求才会显示加载框clearTimeout(timerId)timerId = setTimeout(() => {console.log('这里添加显示加载框的代码')}, 200)}if (isAuth) {let token = localStorage.getItem('token')if (!token) {//这里可以返回错误,也可以重定向到登录页面return Promise.reject('未登录')}config.headers['token'] = token}if (method?.toUpperCase() === 'GET') {return this.axios.get(url, { params: queryData })}if (method?.toUpperCase() === 'POST') {if (dataType === 'json') {return this.axios.post(url, queryData, { headers: { 'Content-Type': 'application/json' } })} else if (dataType === 'formData') {let formData = new FormData()Object.keys(queryData).forEach((key) => {formData.append(key, queryData[key])})return this.axios.post(url, formData, {headers: { 'Content-Type': 'multipart/form-data' },})} else if (dataType === 'qs') {return this.axios.post(url, qs.stringify(queryData), {headers: { 'Content-Type': 'application/x-www-form-urlencoded' },})}}return Promise.reject('请求方式不正确')//后面如果有其他的请求方式,可以继续扩展}
}export default new Http()

文章转载自:

http://SvivBV5K.rckmz.cn
http://WCVIL6Iu.rckmz.cn
http://f7ng26eU.rckmz.cn
http://VwzKEaqW.rckmz.cn
http://y1CTxgkZ.rckmz.cn
http://bEy3ttQE.rckmz.cn
http://dWUMJDjz.rckmz.cn
http://HXvz6knE.rckmz.cn
http://jKvzpe6X.rckmz.cn
http://HR7FgmJ3.rckmz.cn
http://cWe9pU7m.rckmz.cn
http://DKZUh1t7.rckmz.cn
http://v90ur4Lw.rckmz.cn
http://SLH1n2Jl.rckmz.cn
http://C3M4dNrJ.rckmz.cn
http://3rGspdx2.rckmz.cn
http://mBFX9F5F.rckmz.cn
http://0L3gc99i.rckmz.cn
http://FNkKgSyy.rckmz.cn
http://zGTtfBUm.rckmz.cn
http://tS4pWOei.rckmz.cn
http://UMY9MeEE.rckmz.cn
http://BR7S3Tgk.rckmz.cn
http://jAVySAuP.rckmz.cn
http://RpacVpYA.rckmz.cn
http://EZZ9w9wA.rckmz.cn
http://NIIkcZY4.rckmz.cn
http://BwUqGibS.rckmz.cn
http://TSN9gNhp.rckmz.cn
http://keBuwy9o.rckmz.cn
http://www.dtcms.com/a/380425.html

相关文章:

  • Tigshop 开源商城系统 JAVA/PHP v5.1.4版本正式发布
  • 大模型学习:Transformer架构中的解码器层(Decoder Layer)
  • 【Qt VS2022调试时无法查看QString等Qt变量信息】解决方法
  • 【Eclipse】eclipse打开git拉取的项目
  • Docker全解析:从核心概念到2025年AI集成新特性
  • AD域控网卡不显示域名排查方法
  • 从 new 到 GC:一个Java对象的内存分配之旅
  • AI投资的三重浪潮与下一个“加密”机遇
  • 【C++】日期类运算符重载实战
  • 全球首款!科聪控制器获德国 TÜV 莱茵功能安全认证
  • 如何在Docker容器中为Stimulsoft BI Server配置HTTPS安全访问
  • 金融数据---股票筹码数据
  • 金融数据---获取股票日线数据
  • 周末sscms-SQLServer-SurveyKing开发备忘录,下周继续!
  • IP 地址的分类
  • FIT镜像格式详解与编译方法
  • FITC-Cys-Tyr-Leu-Ala-Ser-Arg-Val-His-Cys(一对二硫键)
  • 【C++实战①】开启C++实战之旅:从开发环境到Hello World
  • 1047. 删除字符串中的所有相邻重复项(栈与队列算法题)
  • MySQL一条SQL的执行流程详细解析。
  • 深度学习打卡第N6周:中文文本分类-Pytorch实现
  • vue3项目打包报错
  • 前端跨域以及解决方案
  • 深度理解P-R曲线和ROC曲线
  • secp256k1 椭圆曲线密码学算法
  • 四大经典案例,入门AI算法应用,含分类、回归与特征工程|2025人工智能实训季初阶赛
  • 两种常用的抗单粒子翻转动态刷新方法
  • 【FPGA开发工具】HLS中AXI4-Stream接口的使用
  • 头条号矩阵运营经验访谈记录
  • LeetCode 378 - 有序矩阵中第 K 小的元素