个人技术总结——uview-plus下的Http请求基本使用及相关使用

2023-11-20

这个作业属于哪个课程 软件工程-23年春季学期
这个作业要求在哪里 软件工程实践总结&个人技术总结
这个作业的目标 个人技术总结
其他参考文献 构建之法、CSDN社区、uni-app官方文档、uview-plus官方文档

一、写在前面

在本次团队项目中,我主要担任了前端开发人员,学习使用了uniapp应用框架,通过学习这个框架,学到了很多前端的通用知识。

二、技术概述

2.1 什么情况下使用

当客户端需要从服务端获取数据、发送数据、用户身份验证、更新数据、删除数据时,会用到Http请求。

2.2 学习原因

  • Http请求对参数的处理比uniapp自带的uni.request更强
  • Http请求基于Promise对象实现更简单的request使用方式,支持请求和响应拦截

2.3 技术难点

  • 异步请求和回调处理:HTTP请求是异步的,这意味着在发送请求后,代码会继续执行而不会等待服务器响应。因此,需要了解如何正确处理HTTP请求的回调函数,以便在接收到响应后执行相应的操作。需要处理成功响应和错误响应的情况,并进行适当的错误处理和用户反馈。
  • 请求拦截和响应拦截:uView-Plus提供了请求和响应拦截的功能,可以在发送请求之前和收到响应之后对请求和响应进行处理。了解如何使用拦截器来修改请求或响应的数据、添加请求头、处理错误等,可以提高开发的灵活性和控制力。

三、技术详述

3.1 基本使用

uni.$u.http.middleware(config)
uni.$u.http.request(config)
uni.$u.http.get(url[, config])    //常用
uni.$u.http.upload(url[, config])
uni.$u.http.delete(url[, data[, config]])
uni.$u.http.head(url[, data[, config]])
uni.$u.http.post(url[, data[, config]])  //常用
uni.$u.http.put(url[, data[, config]])
uni.$u.http.connect(url[, data[, config]])
uni.$u.http.options(url[, data[, config]])
uni.$u.http.trace(url[, data[, config]])

3.2 全局配置

可选的配置项如下:

{
    baseURL: '',
    header: {},
    method: 'GET',
    dataType: 'json',
    // #ifndef MP-ALIPAY
    responseType: 'text',
    // #endif
    // 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部)
    custom: {}, // 全局自定义参数默认值
    // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
    timeout: 60000,
    // #endif
    // #ifdef APP-PLUS
    sslVerify: true,
    // #endif
    // #ifdef H5
    // 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+)
    withCredentials: false,
    // #endif
    // #ifdef APP-PLUS
    firstIpv4: false, // DNS解析时优先使用ipv4 仅 App-Android 支持 (HBuilderX 2.8.0+)
    // #endif
    // 局部优先级高于全局,返回当前请求的task,options。请勿在此处修改options。非必填
    // getTask: (task, options) => {
    // 相当于设置了请求超时时间500ms
    //   setTimeout(() => {
    //     task.abort()
    //   }, 500)
    // },
    // 全局自定义验证器。参数为statusCode 且必存在,不用判断空情况。
    validateStatus: (statusCode) => { // statusCode 必存在。此处示例为全局默认配置
        return statusCode >= 200 && statusCode < 300
    }
}

当然,也可以通过uni.$u.http.setConfig()方法进行全局配置,比如配置请求的全局域名baseUrl:

uni.$u.http.setConfig((config) => {
    /* config 为默认全局配置*/
    config.baseURL = `https://www.example.com`; /* 根域名 */
    return config
})

3.3 GET请求

注意,get请求与post请求略有不同,get请求所有参数都在方法的第二个参数中,而post请求的第二个参数为请求参数params,而第三个参数才为配置项。

// 基本用法,注意:get请求的参数以及配置项都在第二个参数中
uni.$u.http.get('/user/login', 
{params: {userName: 'name', password: '123456'}}).then(res => {

}).catch(err => {

})

上面的是基本用法,具体在项目中我是这样使用的:
在这里插入图片描述

3.4 POST请求

// 基本用法,注意:post的第三个参数才为配置项
uni.$u.http.post('/user/login',
 {userName: 'name', password: '123456'} ).then(res => {

}).catch(err => {

})

上面的是基本用法,具体在项目中我是这样使用的:
在这里插入图片描述
注意到,我在请求成功后的处理,调用了uni.showToast(),并让页面返回上一层,改善用户的交互体验,让用户知道自己干了什么?成功了吗?
使用this.timer来延迟执行函数时,要记得在页面卸载时清除定时器,否则在下一次使用时会出现严重Bug,具体来说:
在这里插入图片描述

3.5 获取用户ID

在实际开发一个App时,用户登录后,通常需要在每一个页面保持用户ID,并在需要的时候获取用户ID,一种可行的办法是使用uniapp的数据缓存来实现。

  • uni.setStorage(OBJECT)

    将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。
    在这里插入图片描述
    示例:

    uni.setStorage({
    key: 'storage_key',
    data: 'hello',
    success: function () {
    	console.log('success');
    }
    });
    

    项目中:
    在这里插入图片描述

  • uni.getStorage(OBJECT)

    从本地缓存中异步获取指定 key 对应的内容。
    在这里插入图片描述
    示例:

    uni.getStorage({
    key: 'storage_key',
    success: function (res) {
    	console.log(res.data);
    }
    });
    

    项目中:
    在这里插入图片描述
    可以将获取到的this.id拼接到GET请求的服务端接口后。

四、技术使用中遇到的问题和解决过程

4.1 用户头像上传

  • 问题描述:

将图片的URL (如:https://www.example.com/images/pic.jpg?size=medium&format=jpeg) 上传至数据库中存储,在GET请求后,可以正常根据URL渲染出图片,但是用户在实际使用App的时候往往希望选择存储在本地 (例如相册) 的图片作为自己的头像,这时候根本就没有图片的URL,在GET请求后,更不可能渲染出图片。

  • 问题解决

通过uniapp自带的uni.chooseImage()获取图片的文件路径 >>>使用 pathToBase64()函数将本地文件路径转换为Base64编码>>>将该Base64编码上传到图床接口中>>>获取返回的URL>>>将该URL存储到数据库中
具体来说,请看代码:

async changeHead() {
				var _this = this;

				const res = await new Promise((resolve, reject) => {
					uni.chooseImage({
						count: 1, // 选择图片的数量,这里选择1张
						sourceType: ['album'], // 选择图片的来源,这里选择相册
						success: resolve,
						fail: reject,
					});
				});
				// 从返回结果中获取选中的图片文件路径
				const imagePath = res.tempFilePaths[0];

				//将文件路径转换为Base64编码
				const res1 = pathToBase64(imagePath)
					.then(base64 => {
						var s = base64.substr(base64.indexOf(',') + 1, base64.length);
						//图床的API可以在网上自己找一找,有免费的也有付费的
						uni.$u.http.post('图床API', {//根据找到的图床参数说明来传递参数
							token: '',
							b64_data: s,
						}).then(res => {
							console.log("图片上传成功");
							console.log(res.data.url);
							//将返回的URL存储到本地一个字段中,以便后续上传到数据库使用
							_this.user.avatarUrl = res.data.url
						}).catch(error => {
							console.log(error);
							console.log("失败")
						})
					}).catch(error => {
						console.error(error)
					})
	}

五、总结

uView-Plus提供了便捷的HTTP请求功能,使得在UniApp中进行与服务器的数据交互变得简单。通过uView-Plus的HTTP请求模块,可以轻松地发送GET、POST、PUT、PATCH和DELETE请求,并处理请求的参数、头部、请求体等。它还支持请求和响应拦截器,方便对请求和响应进行处理和修改。此外,uView-Plus的HTTP请求还提供了文件上传和下载的功能,并且可以处理跨域请求。通过学习和掌握uView-Plus的HTTP请求,开发者能够更方便地与服务器进行数据交互,并处理各种常见的网络请求需求。
在使用HTTP请求时,可能还会遇到各种各样的问题,这要求我们要善于发现问题和通过查询资料、文献等解决问题。

六、参考文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

个人技术总结——uview-plus下的Http请求基本使用及相关使用 的相关文章

随机推荐

  • 路由器简单认识

    路由器 是一个三层设备 可以解析到三层 第一层是比特流 电压 电信号 第二层是数据帧 从比特流到数据帧的过程也叫格式化 可以看到MAC地址 第三层是数据包 IP地址 网络层 交换机 网桥 二层设备 区别 1 交换机基于硬件处理 网桥基于软件
  • 简单介绍十几款常用的画架构图流程图的软件

    简单介绍十几款常用的画架构图流程图的软件 draw io draw io是开源免费的在线画图工具 还提供桌面版本 特性 实时协作 支持在线离线版本 存储支持多种方式 Google Drive OneDrive GitHub GitLab D
  • 非常优秀的网站设计案例,设计师必备

    厚积才能薄发 一个优秀的设计师的天性一定是想要获得更多网站设计灵感 擅于为新项目寻找创意切入点 搜索设计参考资源 最新的设计趋势 今天为大家带来了一组免费可商用的网站设计案例 通过这些网站设计案例 你可以获得 寻找不同风格的网站灵感 配色
  • 硬件工程师-三极管

    目录 一 机械开关 二 三极管的种类 三 NPN型三极管 N型三极管 四 PNP型三极管 编辑 五 三极管公式 NPN型三极管 PNP型三极管 六 NPN管的继续讲解 三极管的导通电压 PNP管也是一样 三极管的三种状态 判断三极管是放大还
  • 抖音SEO矩阵系统源码开发部署(二)技术搭建+二次开发

    抖音SEO矩阵系统源码开发 是一项技术密集型工作 需要对大数据处理 人工智能等领域有深入了解 该系统开发过程中需要用到多种编程语言 如Java Python等 同时 需要使用一些框架和技术 如Hadoop Spark PyTorch等 以提
  • 文件搜索工具(Python实现)

    文章目录 文件搜索工具介绍 代码实现 实现思路 os walk函数 os path join函数 代码整体编写 打包成exe程序 效果展示 文件搜索工具介绍 文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置 比如Everything就
  • 原来实现GCP用客户端登录这么简单啊

    充满活力的一天开始了 GCP 就是谷歌的一个云服务 进入VM实例列表通过 SSH 点击 在浏览器窗口打开 进入VPS服务器 下图 切换到管理员用户 sudo i 编辑sshd config文件 vi etc ssh sshd config
  • 一个jq投票,无论成功与否3秒后自动关闭提示框

    原文地址 http blog csdn net zjb574 article details 7759447
  • 超详细的Vue-router (路由)

    由于Vue在 开发时对路由支持的不足 于是官方补充了vue router插件 vue的单页面应用是基于路由和组件的 路由用于设定访问路径 并将路径和组件映射起 来 传统的页面应用 是用一些超链接来实现页面切换和跳转的 在vue router
  • 解决vCharts不兼容Echarts5+版本问题

    背景 在实际开发项目中 发现老项目里同时用到了vCharts和Echarts 此时的Echarts是低版本 并不会出现问题 但在漏洞扫描中Echarts需升级 此时项目开始报错 v charts 不能和echarts5 版本同时存在 当时的
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • 华为OD机试真题-最大平分数组【2023Q1】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • Go语言里面的各种疑难杂症

    什么是闭包 闭包有什么缺陷 func AddUpper func int int var n int 10 return func x int int n n x return n func main f AddUpper fmt Prin
  • System Poles and Zeros 系统零点和极点

    LTI系统 连续的有s传递函数 离散的有z传递函数 s jw 所以连续传递函数的零极点都对应频率值 零点的物理意义是 某个频率的输入信号 正弦信号 不会产生任何输出 被block掉了 极点的物理意义是 某个频率的输入信号会产生无穷大的输出
  • C语言void指针(void*)

    Void指针 void 是一种通用指针类型 可以用来存储任何类型的指针 但不能直接解引用 在C语言中 void指针可以用来实现对类型不确定的数据的操作 或者用作函数的参数和返回类型 以便于处理不同类型的数据 以下是一些常见的void指针的用
  • 微信小程序消息订阅推送消息后端服务(.net core)

    废话不多说直接上代码 分为三部分 第一获取微信模板信息需要token 第二步发送微信模板信息 注意 该方法不需要进行任何修改 参数 access token 是第一步获取到的token 参数 body 是json字符串格式提示信息内容 第三
  • Cannot read property bindings of null 解决方法

    安装 babel preset env yarn add babel preset env 或 npm install babel preset env webpack config js presets env 替换成 presets b
  • rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

    文章目录 一 RabbitMQ安装 1 1 二进制安装 1 2 rabbitmqctl工具 1 3 docker安装 二 rabbitmq基础命令 2 1 多租户与权限类 2 1 1 创建虚拟主机 2 1 2 查看虚拟主机信息 2 1 3
  • 泛微最新漏洞汇总

    泛微OA e cology前台接口SQL注入漏洞 POST mobile browser WorkflowCenterTreeData jsp node wftype 1 scope 2333 HTTP 1 1 Host Content T
  • 个人技术总结——uview-plus下的Http请求基本使用及相关使用

    这个作业属于哪个课程 软件工程 23年春季学期 这个作业要求在哪里 软件工程实践总结 个人技术总结 这个作业的目标 个人技术总结 其他参考文献 构建之法 CSDN社区 uni app官方文档 uview plus官方文档 目录 一 写在前面