harmony 网络请求方法封装

import { UserSettingClass } from '.'
import { BASE_URL, TOKEN_KEY } from '../constants'
import { promptAction, router } from '@kit.ArkUI'

import { ResponseData } from '../models'
import { http } from '@kit.NetworkKit'

// 任何对象都可以as object
export async function requestHttp<T>(url: string, method: http.RequestMethod = http.RequestMethod.GET,
  data?: object) {
  const req = http.createHttp()
  let urlStr = BASE_URL + url // 拼接url

  // 处理get请求的参数
  if (method === http.RequestMethod.GET) {
    if (data) {
      const paramsStr = Object.keys(data).map(key => `${key}=${data[key]}`).join('&')
      urlStr += `?${paramsStr}` // get请求时拼接参数到查询参数上  ?a=1&b=2&c=3
    }
  }

  // 组装参数
  let config: http.HttpRequestOptions = {
    method: method,
    extraData: method !== http.RequestMethod.GET ? data : '', // 非get请求不传data
    header: {
      ContentType: 'application/json',
      Authorization: AppStorage.get(TOKEN_KEY),
    },
    readTimeout: 10000, // 如果多少秒没响应就断开
    expectDataType: http.HttpDataType.OBJECT // 自动将res.result转换为对象
  }

  try {
    const res = await req.request(urlStr, config)
    console.info('res123', 'requestHttp res:' + JSON.stringify(res))

    if (res.responseCode === 401) {
      promptAction.showToast({ message: '登录失效' })
      // 删除token - 删两个地址 首选项- 全局状态
      // new UserSettingClass(getContext()).setToken("") // 清空首选项token
      UserSettingClass.setToken('')
      AppStorage.set(TOKEN_KEY, "") // 只能设置 不能删除
      router.replaceUrl({
        url: 'pages/login/Login' // 跳转到登录页
      })
      return Promise.reject(new Error("登录失效"))
    }

    if (res.responseCode === 404) {
      promptAction.showToast({ message: '请求地址错误' })
      return Promise.reject(new Error("请求地址错误"))
    }

    const result = res.result as ResponseData<T>
    if (result.code === 200) {
      return result.data
    } else {
      promptAction.showToast({ message: "接口请求错误" }) //  res.msg没处理好 有可能出来一堆服务器语言
      console.error(' 接口请求错误-----> ', JSON.stringify(result))
      return Promise.reject(JSON.stringify(result)) // 业务错误 请求终止
    }

  } catch (err) {
    console.error('err -----> ', err)
    return Promise.reject(err)
  }

}


export class Request {
  static get<T = null>(url: string, data?: object): Promise<T> {
    return requestHttp<T>(url, http.RequestMethod.GET, data)
  }

  static post<T = null>(url: string, data?: object): Promise<T> {
    return requestHttp<T>(url, http.RequestMethod.POST, data)
  }

  static delete<T = null>(url: string, data?: object): Promise<T> {
    return requestHttp<T>(url, http.RequestMethod.DELETE, data)
  }

  static put<T = null>(url: string, data?: object): Promise<T> {
    return requestHttp<T>(url, http.RequestMethod.PUT, data)
  }
}

二次封装

post请求

/**  交货的API */
export function deliverAPI(data: DeliverParamsTypeModel) {
  return Request.post('/driver/tasks', data)
}

get请求

export function getTaskListAPI(data: TaskListParamsModel) {
  return Request.get<TaskListDataModel>('/tasks/list', data)
}

使用方法

const data = await getTaskListAPI(this.queryParams)
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值