百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

uni-app如何封装公共HTTP请求方法

liuian 2025-01-17 12:18 56 浏览

前端开发是离不开HTTP请求的,在uni-app中,是如何发送HTTP请求的呢?

官方其实提供了一个 uni.request(OBJECT) 方法,然而,uni.request 的问题太大了,给我的感觉还像是jq时代去发送HTTP请求的用法,比如:

  • 代码冗余:每次发起请求时都需要编写类似的配置代码,导致代码重复。
  • 缺乏统一管理:没有统一的地方管理请求参数、头信息、错误处理等,使得代码不易维护。

像我们现在经常用的axios,提供了请求拦截器和响应拦截器,而且是 Promise 的调用方式,这让我们用起来非常舒服,那怎么把 uni.request 封装成这种方式呢?

/**
 * 通用接口请求
 */

import { getToken } from '@/utils/token.js'

// 定义返回状态码,这个应该单独写一个文件
const code = {
	codeOK: '0',
	codeNoMobile: '-122',
	codeUnLogin: '10086',
	codeBan: '10087',
}
// 定义网络请求公共地址
const network = {
	baseUrl: 'https://api.com'
}

// 定义公共请求参数
const defaultConfig = {
	timeout: 5000,
	dataType: "json",
	header: {
	  "content-type": "application/json",
		'Authorization': getToken()
	}
}

const request = (options = {}) => {
	return new Promise((resolve, reject) => {
		// 发送请求
		uni.request({
			...defaultConfig,
			...options,
			url: network.baseUrl + options.url || '',
			header: {
				...defaultConfig.header,
				...options.header
			}
		}).then(resp => {
			if (resp.data.code == code.codeUnLogin) {
				uni.navigateTo({
					url: '/pages/login/index'
				}, false)
			} else if (resp.data.code == code.codeBan) {
				uni.navigateTo({
					url: '/pages/index/ban?banReason=' + resp.data.msg
				})
			}
			resolve(resp.data);
		}).catch(error => {
			reject(error);
		})
	})
}

export default request

这样我们就对uni.request进行了Promise封装,这里主要是提供一个思路,具体的你还要根据自己的情况也业务进行封装,看一下使用方法:

import request from '@/utils/request.js'

export function getAddressListApi(data) {
	return request({
		url: '/union/productAddr/findAll',
		method: 'get',
		data
	})
} 

这样使用是不是舒服多了,有的人在这里可能会有疑问,既然已经封装了request,为什么还要把每个请求再封装一次,这就涉及到代码封装的思想问题了,同样的代码不能出现两遍。比如你在连个地方调用了这个接口,有一天后端接口地址改了,你怎么做,是不是还得全局搜索,是不是出错的概率就高了,这样封装你只需要改这一个地方。

同样的逻辑,比如返回的状态码codeOK,这种都应该放在一个统一的地方进行管理,虽然说大概率没人去改这个,但是万一呢?全局去搜索吗,搜索0可不好搜。

从代码的封装性来说就不能这么干,否则你总会有吃亏那一天的,我刚开始写代码的时候也不会这样写,吃过亏才会长教训。

封装起来有两个明显的好处:

  • 高度可改性:这个状态码的值你想怎么改就怎么改,对我的业务逻辑都没有影响,而且我改起来非常快,同样是搬砖的有时候差距就在这,你觉得我要改半天,我其实1s就改好了;
  • 提高可读性:如果你是一个新接手这个代码的人,res.code == '0' 和 res.code == codeOK,自己体会一下,谁能看懂等于'0'是什么意思;

还有一种封装思路,就是使用 uni.addInterceptor 这个官方提高的拦截器对request方法进行拦截,这样可以做到添加token的处理公共返回结果,但是我觉得还是用Promise的方式使用更舒服,见仁见智吧,都可以。

相关推荐

win10企业版和专业版有什么区别哪个好

就性能而言,Windows10企业版比专业版好。1.企业版的更新频率比专业版少,可以降低更新所需要的可用时间。2.如果你是企业,在管理、保护数据安全、部署和集中管理设备方面,企业版会比专业版更具优势...

51重装系统后怎么恢复原来的系统

方法/步骤分步阅读1/5在开始菜单中打开控制面板,打开控制面板之后,选择:备份和还原选项。2/5点击:打开系统还原,如果有账户控制则会有所提示,通过即可。3/5然后会开始还原文件和设置的向导,你只需要...

可能没有权限使用网络资源(可能没有权限使用网络资源 win10)

右击“我的电脑”→“属性”→“计算机名”,看该选项卡中有没有出现你的局域网工作组名称,如“workgroup”等。然后单击“网络ID”按钮,开始“网络标识向导”:单击“下一步”,选择“本机是商业网络...

怎么查看宽带账号和密码(怎么查宽带帐号和密码)
怎么查看宽带账号和密码(怎么查宽带帐号和密码)

宽带账号密码要记牢,重要的账号密码要记小本本上!下面我来具体讲讲获取方法。1.查看发票、合同、官方小卡片是否标明。以我们这个城市为例,发票上的用户号码就是宽带账号。047403100006就是宽带账号,密码是123456,密码错误就是身份证...

2025-12-19 21:05 liuian

预装系统的固态硬盘怎么安装

首先,安装系统有三个办法可以选择:一是在固态硬盘上全新安装系统;二是在PE系统下,将机械硬盘上的系统克隆到固态硬盘上。注意GPT格式的硬盘不能用这个方法。三是HDD安装。然后,主板设置中将固态硬盘设置...

如何还原已经被删除的文件(如何还原彻底删除的文件)

首先我们需要通过浏览器搜索互盾数据恢复软件,将这款软件下载到我们的电脑上1、下载好后运行互盾数据恢复软件,软件界面有六大功能,因为我们需要对回收站清空的数据进行恢复,所以点击界面的“误清空回收站”即...

mhdd硬盘修复教程(如何用mhdd修复硬盘)

eraser这个选项试试。mhdd修复效果不是很好哦打开MHDD的重映射功能,就是REMAP选为NO,然后再重新扫描就可以自动映射了1在DOS下运行MHDD,软件启动后按F4;2点一下上方向键,再...

手机真伪查询官网入口(荣耀手机真伪查询官网入口)

进入http://www.tenaa.com.cn/网站后,首先输入的是您的省份,城市,和许可证号.许可证号需要去掉电池,在手机的后面看一个贴条:进网许可;第一行就是许可证号;第二行是设备型号;第三行...

穿越诸天万界推倒女主角的小说

《绝代双骄》。对于此书,其深入人心有目共睹,我就不再赘述了。据我所知,包括歌仔戏在内它的版本至少有七种,不过最好的梁吴版都没能演出其精髓。此书或许可以看作承前启后的作品:既为之前的传统套路作了个精彩的...

电脑grub怎么修复系统(windows grub修复)

方法是:1、准备一个任意大小的u盘,然后在能正常使用的电脑搜索通用pe工具箱,在官网下载最新的通用pe工具箱。安装它,然后将u盘制作成u盘启动盘。2、接着我们将制作好的u盘启动盘,插在报错的电脑上,重...

photoshop安卓手机版下载(photoshop android版)

1.在搜索引擎中输入adobe并点击搜索。2.点击adobe官网。3.点击支持并点击下载与安装。4.点击开始免费试用并点击下载。5.打开文件夹并点击打开进行安装即可。点击开始免费试用并点击下载。5.打...

笔记本无线上网卡包月(笔记本无线上网卡包月多少钱)

您好,各地区无线包月上网卡资费情况是不同的,建议以您当地电信资费为准,湖北电信的包月无线上网卡:1、天翼宽带上网卡省内流量套餐(8G),2、【4G上网卡】天翼宽带上网卡省内流量套餐(20G),更多上网...

正版计算器下载(下载计算器普通版)
正版计算器下载(下载计算器普通版)

1.检查应用程序中的各文件夹,查看计算器图标是否整理到某文件夹中。2.部分手机支持隐藏应用程序功能,取消隐藏后查找。3.查看是否禁用计算器功能,取消禁用尝试。操作:进入设定-(应用程序)-应用程序管理器中查找计算器图标,选择启用。4.部分手...

2025-12-19 16:55 liuian

win10永久激活密钥大全(win10正版永久激活密钥)

1不是免费的2Win10永久激活密钥并不是免费的,因为微软公司对于正版软件的授权是需要收费的。通过购买正版授权密钥,用户可以合法地激活Windows10操作系统,享受到正版软件的各种功能和更新支...

笔记本点关机键无反应(笔记本电脑点关机键没反应怎么回事)

解决方法:1、右键点击【计算机】图标2、点击【管理】选项?3、点击【设备管理器】选项4、右键点击【图像设备】?5、点击【禁用】6、再次点击【关机】按钮即可完成关机。1、拔掉外设启动电脑试试,重新拔插一...