学习鸿蒙Next 之路 http

关于学习鸿蒙开发之http的请求

首先还是老样子先上代码,然后我再说出我的看法

先创建一个请求的函数
function RequestHttp(url:string,data?:Object|string){
}

先展示get请求,之前在unity的开发中只是用到了get和post。没想到在学鸿蒙前端的时候还用到put和del。其实这四个函数就是增删改查的意思,但是我在unity开发请求http的时候你只需要用到数据就可以了,而且接口的数据并不是所有的字段你都用得上所以我觉得在data参数真的没必要说是要用object类型,这里还是写一下把,因为看教学视频中有这么写的我还是在这里说一下。.

首先创建http,http这个是鸿蒙的包。
let req = http.createHttp()

再说这个url地址,get请求都是这样http://xxx.xxx.xxx/xx?name='张三'

如果请求的参数需要多写就是这样,需要有个&符号拼接
http://xxx.xxx.xxx/xx?name='张三'\&age=18

所以

1、我觉得url拼接的话不要在封装函数内部拼接,因为他是个工具

2、地址不是固定的,我解释下地址不固定为什么,但是一般的情况下地址是不会变的

在之前unity开发中,后台开发是接的设备硬件,你换设备厂商了,后台逻辑可能会更改,但是之前的后台接口可能是个通用的,后台会给你个新的接口地址

因为我不知道真正的鸿蒙开发是如何,搜一下资料很多都是axios,web前端开发的东西,emmmmm咱没接触过不是很懂。

在学习的时候看到个这个代码
const temp = Object.keys(data).map(key => {
${key}=${data[key]}
}).join('&')
urlstr += ?${temp}

这代码就是上述之前讲到的拼接字符串,但是我想的是如果你不需要这么多obj的字段属性,你传值的时候就不用拼接那么长,

比如查你的个人信息,你只需要出示你的身份证号就好了,你干嘛把你相关的亲戚也报出来呢?不知道大家明白我的意思没有?

你只需要传当前接口需要的字段,如果需求的字段很多你可以自己再去封装拼接地址的用法temp。一般不会的,都会有个唯一标识去查这个信息。

先说下请求函数参数,urlstr地址。另一个就是请求需要传的参数

req.request(urlstr, info)

//组装参数
let info: http.HttpRequestOptions = {
method: http.RequestMethod.GET,
extraData:''||data
header: {
ContentType: 'application/json',
Authorization: token
},
readTimeout: 10000, //10s不然就超时
expectDataType: http.HttpDataType.OBJECT//返回对象
}

HttpRequestOptions 参数method是请求的方法是什么方式,这里介绍的get ,extraData就是传的''空字符串,如果是post或者put就是data

这个data就是对象,你需要传这个对象,(下面是json对象展示)在鸿蒙里他好像是直接就可以对象转json发送给后端

{

'name':'张三',

'age':'18'

}

如果你需要有token验证的,你在header中就写上这个header的Authorization

接下来就是数据返回
let result = await req.request(urlstr, info)

函数的返回值是HttpResponse,他有个responseCode属性。可以根据这个code是多少判断 你请求成功还是其他问题

当然他是promiss类型的HttpResponse,需要在request前面加上await

返回后可以这么写,ResponseData函数后面是有泛型的标识的,这里好像没有显示出来
export interface ResponseData{
code: number
msg: string
data: T
}
let res = result.result as ResponseData

返回的result就对象就可以解析为一个状态码,一个消息,然后一个数据体,转一下直接用data就是你需要的数据对象,因为你请求的时候是有这个参数 expectDataType: http.HttpDataType.OBJECT//返回对象 不然你需要json.pase去转一下对象

那么return回来的就是这个对象。 return res.data 返回依旧是promiss 在函数中你就必须加上promisss 但是这个T的泛型标识还是没有显示(Promiss后面要有泛型标识)RequestHttp后面也有

async function RequestHttp(url: string,data?: object): Promise{

}

200responseCode就是成功,然后msg是ok 你就是请求成功了,如果请求不成功或者其他问题,看看responseCode 如果404那么你地址写错了,401说明你token过期了,你需要重新登录去获取token,如果是其他的responseCode,那么你就抛出个异常,看看问题出在哪里

在请求的时候用个try catch 包裹起来

console.error('err===============>', err)

return Promise.reject(err)

相关推荐
内有小猪卖23 分钟前
tcl/perl 脚本命令学习
开发语言·学习·perl
珞瑜·31 分钟前
(一)Python程序结构
python·学习
蜡笔小新星1 小时前
Ubuntu上安装Cython
经验分享·学习·ubuntu
goTsHgo2 小时前
HTTP长连接和短连接 简介
网络·网络协议·http
飘逸高铁侠2 小时前
修改 Docker 容器的 http_proxy 和 https_proxy
http·docker·https
千殃sama2 小时前
Flythings学习(一)基础
学习·flythings
PaLu-LI3 小时前
ORB-SLAM2之OpenCV reshape函数
开发语言·c++·opencv·学习·ubuntu
王俊山IT3 小时前
C++学习笔记----9、发现继承的技巧(一)---- 使用继承构建类(4)
开发语言·c++·笔记·学习
IOT.FIVE.NO.14 小时前
Linux学习笔记9 文件系统的基础
linux·笔记·学习