学习鸿蒙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)

相关推荐
梁下轻语的秋缘19 分钟前
HarmonyOS:重构万物互联时代的操作系统范式
华为·重构·harmonyos
lpfasd12322 分钟前
Flutter与Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析
flutter·kotlin·harmonyos
海尔辛23 分钟前
学习黑客Active Directory 入门指南(一)
windows·学习·ad
交叉编译之王 hahaha35 分钟前
OpenHarmony 5.1.0 Release目录结构详细解析(3级目录)
arm开发·华为·harmonyos
交叉编译之王 hahaha1 小时前
RK3568-鸿蒙5.1与原生固件-扇区对比分析
华为·harmonyos
HarmonyOS_SDK1 小时前
【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
harmonyos
兔子坨坨2 小时前
pycharm连接github(详细步骤)
windows·git·学习·pycharm·github
虾球xz3 小时前
游戏引擎学习第293天:移动Familiars
c++·学习·游戏引擎
lichuangcsdn3 小时前
【springcloud学习(dalston.sr1)】Eureka服务端集群的搭建(含源代码)(二)
学习·spring cloud·eureka
Hello.Reader3 小时前
ngx_http_proxy_protocol_vendor_module 模块
网络协议·http·flask