鸿蒙(HarmonyOS)网络请求封装,以及token值的持久化存储(AppStorage)

网络封装有很多种封装法,这个看个人了,我的话比较习惯拦截器这种的,因为不管后面做什么认证或者一些其他的需求也可以加一些条件进行就可以达到效果了

import http from '@ohos.net.http'
import Prompt from '@system.prompt'
export const baseURL: string = '192.168.112.228:8080'
const httpRequest = http.createHttp()
export function requestHttp(url, method, requestData?){
  let responseResult = httpRequest.request(
    baseURL+url,
    {
      method: method,
      header: {
        'Content-Type': 'application/json',
        "Authorization" : 'Bearer ' + AppStorage.Get('token')
      },
      extraData: requestData
    }
  );
  return responseResult.then(value =>{
    let result = JSON.parse(`${value.result}`);
    if(value.responseCode === 200){
      return result
    }else{
      Prompt.showToast({
        message: result.msg
      })
    }
  }).catch(() =>{
    Prompt.showToast({
      message: '请求错误'
    })
  }).finally(() =>{
    httpRequest.off('headersReceive')
    httpRequest.destroy()
  })
}

// 外部调用
requestHttp('/api/applet/chargingPile/list', 'GET').then(res=>{
	console.info(`${res}`)
})

 假如你想更加规范,那么可以把那个形参加上参数类型,当然加上的话,那么就意味着method请求类型要多写很大一串。其实它这个类型定义是通过枚举定义的,这个枚举的属性类型还是字符串。所以这边我就偷懒不用它自己定义的枚举,而是直接用它枚举对应的字符串内容。

 对了这里的token值可以在外部通过

AppStorage.SetOrCreate('token',res.token)方法直接进行持久化存储。用首选项存储也可以,但是会比这个麻烦很多。

这里可能说的有点绕,所以我直接把那一串枚举截图下来了给大家参考,查看源码也是可以让自己的编程水平还有问题分析能力更上一层楼,这个也是我在一个视频博主那里学到的。

给形参定义类型的话,就是这样定义,然后把鼠标移到method定义的类型上面按住ctrl点进去就可以看到它的枚举。

 下面就是method类型枚举定义,最终的数据类型还是字符串。

假如给形参定义了类型的话外面调用的话,然后网络请求类型就得这样写成这样http.RequestMethod.GET,是不是比我们直接写‘GET’方便很多。

当然也可以再次进行二次封装,就是直接使用静态方法去调用它,然后用return返回数据。

export class request {
  static get(url: string, data?: any) {
    return requestHttp(url, http.RequestMethod.GET, data)
  }

  static post(url: string, data?: any) {
    return requestHttp(url, http.RequestMethod.POST, data)
  }

  static put(url: string, data?: any) {
    return requestHttp(url, http.RequestMethod.PUT, data)
  }

  static delete(url: string, data?: any) {
    return requestHttp(url, http.RequestMethod.DELETE, data)
  }
}

 外部调用的话就是先导入request这个类,然后直接用类名去调用里面的静态方法以下是我用async,await转成了同步,当然也可以不转直接.then方法也可以,这个看需求。

    let result = await request.get('/prod-api/api/rotation/list?type=2')
    this.banner = result.rows

希望可以帮到大家,当然有在学习鸿蒙的也可以跟我沟通学习哈哈哈。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值