uniapp+axios请求的封装

ops/2024/11/29 14:55:26/

 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/ops/30364.html

相关文章

Go图片列表

需求 在一个页面浏览目录下所有图片 代码 package mainimport ("net/http""fmt""io/ioutil""sort""strings""strconv" )func handleRequest(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Proto &…

(十二)Servlet教程——HttpServletResponse接口

HttpServletResponse接口继承自ServletResponse接口&#xff0c;HttpServletResponse用来封装HTTP响应消息&#xff0c;简称response对象。 每次请求一个Servlet&#xff0c;Servlet容器就会针对每次请求创建一个response对象&#xff0c;并把它作为参数传递给Servlet的service…

单链表经典算法

一&#xff0c;移除链表元素 思路一 遍历数组&#xff0c;如果遇到链表中的元素等于val的节点就执行删除操作 typedef struct ListNode ListNode;struct ListNode* removeElements(struct ListNode* head, int val) {if(headNULL){return NULL;} ListNode*pnewhead(ListNode*)m…

Ubuntu如何安装Calicoctl

在 Ubuntu 上安装 Calico 通常涉及几个步骤。以下是一般的安装过程&#xff1a; 安装 etcd 或使用 Kubernetes 集群的现有 etcd&#xff1a; 如果你使用的是独立的 etcd&#xff0c;请确保 etcd 在可访问的地方运行。如果你使用的是 Kubernetes 集群&#xff0c;通常会有一个 e…

Deep learning Part Five RNN--24.4.29

接着上期&#xff0c;CBOW模型无法解决文章内容过长的单词预测的&#xff0c;那该如何解决呢&#xff1f; 除此之外&#xff0c;根据图中5-5的左图所示&#xff0c;在CBOW模型的中间层求单词向量的和&#xff0c;这时就会出现另一个问题的&#xff0c;那就是上下文的单词的顺序…

C# 字符串左不足位数时补充0

想让一个整数或字符串转换为字符串后&#xff0c;如果其长度不足5位&#xff0c;则在左边补充0直到达到5位&#xff0c;你可以使用以下几种方式&#xff1a; 以下以字符串左不足5位时补充0的操作为例。 这些方法都会确保不论输入数字的大小如何&#xff0c;输出的字符串始终至…

openlayers6怎么在vue中使用

在 Vue 中使用 OpenLayers 6&#xff0c;你需要遵循几个步骤来确保 OpenLayers 库可以被正确集成到你的 Vue 项目中。以下是一个基本的指南&#xff1a; 安装 OpenLayers 使用 npm 或 yarn 将 OpenLayers 安装到你的项目中&#xff1a; bash复制代码 npm install ol # 或者 …

AI系列:大语言模型的RAG(检索增强生成)技术(上)

前言 大型语言模型&#xff08;LLM&#xff09;虽然在生成文本方面表现出色&#xff0c;但仍然存在一些局限性&#xff1a;数据是静态的&#xff0c;而且缺乏垂直细分领域的知识。为了克服这些限制&#xff0c;有时候会进行进一步的模型训练和微调。在实际应用中&#xff0c;我…