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

uniapp请求接口封装

前言:

        uniapp请求接口封装

实现效果:

实现代码:

核心:request.js
// 是否为本地环境
const isDev = process.env.NODE_ENV === 'development'// 默认配置
const defaultOptions = {baseURL: isDev ? 'https://xxxxx' : '',timeout: 15000, // 请求接口超时时间dataType: 'json',header: {'Content-Type': 'application/json'},showErrToast: true,loading: true
}// 请求核心方法
const request = async (method, url, data = {}, customOptions = {}) => {// 合并配置const options = {...defaultOptions,method,data,}// 请求接口地址处理,如果传来http/https的直接用传来的地址if( url.startsWith('http') ||  url.startsWith('https')){options.url = url} else {options.url = `${defaultOptions.baseURL}${url}`}// 请求拦截const token = uni.getStorageSync('token')if (token) {options.header.Authorization = `Bearer ${token}`}// 显示 Loadingif (options.loading) {uni.showLoading({ title: '加载中...', mask: true })}// 自定义headerif(customOptions.header){options.header = Object.assign(options.header,customOptions.header)}return new Promise((resolve, reject) => {uni.request({...options,success: (res) => {try {const processedRes = responseInterceptor(res)resolve(processedRes.data)} catch (error) {reject(error)}},fail: (err) => {console.error('[Request Fail]', err)if (options.showErrToast) {uni.showToast({ title: err.errMsg || '请求失败', icon: 'none' })}reject(err)},complete: () => {options.loading && uni.hideLoading()}})})
}// 响应拦截器
const responseInterceptor = (res) => {console.log(`[Response] ${res.statusCode}`, res)// HTTP 状态码错误if (res.statusCode < 200 || res.statusCode >= 300) {throw new Error(`接口请求失败 Error: ${res.statusCode}`)}// 业务状态码处理if (res.data?.code === 401) {handleUnauthorized()throw new Error('登录状态已过期')}return res
}// 401 处理封装
const handleUnauthorized = () => {const pages = getCurrentPages()const currentPage = pages[pages.length - 1]const redirectUrl = currentPage ? `/${currentPage.route}` : '/'uni.removeStorageSync('token')uni.removeStorageSync('userInfo')uni.showToast({title: '登录已过期',icon: 'none',duration: 800})setTimeout(() => {// 关闭所有界面,回到登录页面uni.reLaunch({url: `/pages/login/index?redirect=${encodeURIComponent(redirectUrl)}` })}, 800)
}// 快捷方法
export const get = (url, data, options) => request('GET', url, data, options)
export const post = (url, data, options) => request('POST', url, data, options)
export const put = (url, data, options) => request('PUT', url, data, options)
export const del = (url, data, options) => request('DELETE', url, data, options)// 文件上传优化
export const uploadFile = (url, filePath, options = {}) => {let fullUrl = ''// 请求接口地址处理,如果传来http/https的直接用传来的地址if( url.startsWith('http') ||  url.startsWith('https')){fullUrl = url} else {fullUrl = `${defaultOptions.baseURL}${url}`}return new Promise((resolve, reject) => {uni.uploadFile({url: fullUrl,filePath,name: 'file', // 参数字段header: {Authorization: uni.getStorageSync('token') ? `Bearer ${uni.getStorageSync('token')}` : '',...options.header},success: (res) => {if (res.statusCode === 200) {try {resolve(JSON.parse(res.data))} catch (e) {resolve(res.data)}} else {reject(new Error(`上传失败:${res.errMsg}`))}},fail: reject})})
}// 文件下载
export const downloadFile = (url, options = {}) => {const fullUrl = url.startsWith('http') ||  url.startsWith('https') ? url : `${API_URL}${url}`return uni.downloadFile({url: fullUrl,...options})
}

http://www.xdnf.cn/news/13307.html

相关文章:

  • C#引用传递代码记录
  • 第七章: SEO与渲染方式
  • 滚珠导轨在汽车自动化装配线中的核心传动
  • AVCap视频处理成帧和音频脚本
  • CKA考试知识点分享(9)---gateway api
  • 混合型交易所架构:CEX+DEX融合与Layer2扩展方案
  • Visual Stdio程序弹出的黑框内容如何复制
  • (天文学)恒星的介绍分类
  • 中兴B860AV1.1江苏移动-自动降级包
  • 手写RPC框架<四> 负载均衡
  • LSTM-XGBoost回归预测,多输入单输出(Matlab完整源码和数据)
  • 【AI时代速通QT】第一节:C++ Qt 简介与环境安装
  • 41页PPT | 基于AI制造企业解决方案架构设计智能制造AI人工智能应用智能质检人工智能质检建设
  • MyBatis实战指南(六)自动映射
  • 科技评论:Jim Keller 的“反向”战略:RISC-V 成为中国应对美国芯片封锁的关键武器
  • 为何AI推理正推动云计算从集中式向分布式转型
  • 一个教学项目pom.xml杂记
  • V837s-SDK Telnetd服务连接不上异常解决
  • 蓝奏云(Lanzou Cloud)一款国内知名的免费网盘和文件分享服务 以及蓝奏云的api
  • Cesium1.95中高性能加载1500个点
  • MybatisPlus
  • python整数处理 2022年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • c++中类的继承
  • 使用Meshlab处理非流形边的问题
  • ruoyi框架分页插件失效
  • PG库创建自增ID
  • 【无标题】装箱问题的拓扑动力学解法:几何凝聚与量子坍缩模型
  • 7.3.折半查找(二分查找)
  • Playwright:高效处理浏览器兼容性的自动化测试利器
  • BERT情感分类