uniapp+axios请求的封装

embedded/2024/9/22 21:33:56/

 uniapp+axios请求的封装

因在用vue3.0时会导致无法引有buildFullPath和settle两个库。所简单处理这两个方法

// utils/request.ts文件代码如下

javascript">/***uniapp+axios请求的封装
**/import axios from 'axios'
import $config from "@/config/config"
import {getToken,removeToken} from "@/utils/auth"// create an axios instance
//创建axios实例
const service = axios.create({baseURL: process.env.NODE_ENV === 'development' ? $config.baseUrl.dev : $config.baseUrl.pro,withCredentials: true, // send cookies when cross-domain requeststimeout: $config.timeout,// request timeoutheaders:{'Content-Type':'application/json;charset=utf-8'}
})//响应请求
service.interceptors.request.use(config => {if (config.headers.auth) { // 判断请求是否需要认证if(getToken()) config.headers['Authorization'] ='Authorization '+getToken();}return config},error => {return Promise.reject(error)}
)//响应拦截器
service.interceptors.response.use(({config,data}) => {console.log(data)if (data.code === 'A0230') { // token过期if(getToken()){uni.showToast({icon:"loading",title: '会话已过期,重新获取',success() {removeToken() //删除Tokenconsole.log('失败处理')}})}}},error => {const {code,msg} = error.response.dataif (code === 'A0230') { // token过期if(getToken()){uni.showToast({icon:"loading",title: '会话已过期,重新获取',success() {removeToken() //删除Tokenconsole.log('失败处理')}})}} else {uni.showToast({title: msg,icon: 'none'});return Promise.reject(new Error(msg || 'Errors'))}}
)//自己定义个适配器,用来适配uniapp的语法
service.defaults.adapter = function(config) {return new Promise((resolve, reject) => {//if(typeof config.data==="string") data=JSON.parse(config.data) //TODO GET会变成stringuni.request({method: config.method.toUpperCase(),url: combineURLs(buildFullPath(config.baseURL,config.url), config.params, config.paramsSerializer),header: {...config.headers},data:config.data,complete:(response)=>{response = {data: response.data,status: response.statusCode,errMsg: response.errMsg,header: response.header,config: config.data};settle(resolve, reject, response);}})})
}function buildFullPath(baseURL, requestedURL) {console.log(buildURL(requestedURL));if (baseURL && !buildURL(requestedURL)) {return combineURLs(baseURL, requestedURL);}return requestedURL;
}function buildURL(url) {// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed// by any combination of letters, digits, plus, period, or hyphen.return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
}function combineURLs(baseURL, relativeURL) {return relativeURL? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, ''): baseURL;
}function settle(resolve, reject, response) {let validateStatus = response.config.validateStatus;if (!response.status || !validateStatus || validateStatus(response.status)) {resolve(response);} else {reject(createError('Request failed with status code ' + response.status,response.config,null,response.request,response));}
};export default service

使用封装的例子

//aip/auth.ts

javascript">/*** 用户**/
import request from '@/utils/request'/*** 反馈信息* @param {*} type * @param {*} contact_mobile * @param {*} content * @param {*} images */
export function getBanner(data)  {return request({url:`/index/banner`,method: 'POST',data:data,headers: {'auth': true// 需要认证,通过}})
}


http://www.ppmy.cn/embedded/30905.html

相关文章

简单记录一下在linux中安装pytorch成功!

1. 安装版本 pytorch版本:2.0.0 torchvision版本:0.15.0 torchaudio版本&#xff1a;2.0.0 cuda版本&#xff1a;cuda11.8 python版本&#xff1a;3.9 # CUDA 11.8 pip install torch2.0.0cu118 torchvision0.15.1cu118 torchaudio2.0.1 --index-url https://download.py…

堆排序以及TOP-K问题

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;今天我们来深入理解堆这种数据结构&#xff0c;分析一下堆排序以及TOP-K问题&#xff0c;准备好了吗&#xff1f;我要开始咯&#xff01; 一、堆排序 这里我们先假设要排成升序&#xff0c;也就是从左到右&#xf…

Nacos AP 和CP 切换-理论

&#x1f600;前言 本篇博文是关于Nacos AP 和CP 切换-理论&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&…

和鲸科技出席第五届空间数据智能学术会议,执行总裁殷自强受邀发表主题报告

4月26日&#xff0c;由 ACM SIGSPATIAL 中国分会、ACM SIGMOD 中国分会主办的第五届空间数据智能学术会议&#xff08;SpatialDI 2024&#xff0c;下简称“会议”&#xff09;在南京盛大开幕。本次会议特邀李清泉院士、周成虎院士、丛高教授、谢炯博士、张雪英教授等国内外知名…

GD32E103C8T6 封装LQFP-48 GigaDevice(兆易创新) 单片机

GD32E103C8T6 是由GigaDevice&#xff08;兆易创新&#xff09;公司生产的一款基于ARM Cortex-M4内核的32位MCU&#xff08;微控制器&#xff09;。以下是GD32E103C8T6的一些主要功能和参数介绍&#xff1a; 主要功能&#xff1a; 高性能ARM Cortex-M4内核: 采用120MHz的ARM …

【区块链】椭圆曲线数字签名算法(ECDSA)

本文主要参考&#xff1a; 一文读懂ECDSA算法如何保护数据 椭圆曲线数字签名算法 1. ECDSA算法简介 ECDSA 是 Elliptic Curve Digital Signature Algorithm 的简称&#xff0c;主要用于对数据&#xff08;比如一个文件&#xff09;创建数字签名&#xff0c;以便于你在不破坏它…

Unity Timeline学习笔记(5) - 自定义轨道切片上变量Transform对象丢失,使用ExposedReference来解决。

问题 我在笔记(4)中后来又引用了Hierarchy中的Transform对象Transform obj&#xff0c;发现一些问题。 要么无法拖入进去对象&#xff0c;要么拖入进去保存后&#xff0c;再次编辑或者运行的时候发现obj丢失了。 我们还是用修改下笔记&#xff08;4&#xff09;的部分代码来…

【C++风云录】破解聊天机器人开发:寻找最适合你的工具

重量级面面观&#xff1a;六大顶级聊天机器人开发工具的对比 前言 在本文中&#xff0c;我们将深入探讨六种不同的C集成聊天机器人开发工具&#xff0c;包括Botkit, DialogueFlow, Rasa, Wit.ai, IBM Watson Assistant和 Microsoft Bot Framework。每个工具都将从选择原因&am…