关于学习鸿蒙开发之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)