在 ArkTS 网络请求中,重新封装一下 http 模块

news/2024/10/6 21:51:23 标签: http, 网络协议, 网络
http://www.w3.org/2000/svg" style="display: none;">

在ArkTS中,重新封装http模块可以提供一个更简洁、更易于使用的API,同时隐藏底层细节,使开发者能够更专注于业务逻辑。以下是一个简单的示例,展示了如何重新封装鸿蒙系统的@kit.NetworkKit中的http模块:

// 创建一个新的文件,例如 httpService.ets

import http from '@ohos.net.http';

import { http } from "@kit.NetworkKit";
import CommonConstant from "../constants/Contants";
import {AllType} from "./Type"

export class HttpService {
  private static instance: HttpService;

  // 私有构造函数,防止外部实例化
  private constructor() {
  }

  // 获取单例
  public static getInstance(): HttpService {
    if (!HttpService.instance) {
      HttpService.instance = new HttpService();
    }
    return HttpService.instance;
  }

  // 发起GET请求
  public async get(url: string, headers?: object) {
    const httpRequest = http.createHttp();
    try {
      const response = await httpRequest.request(url, {
        method: http.RequestMethod.GET,
        header: headers,
        readTimeout: CommonConstant.READ_TIMEOUT,
        connectTimeout: CommonConstant.CONNECT_TIMEOUT
      });
      if (response.responseCode === 200) {
        return response.result;
      } else {
        throw new Error(`请求失败: ${response.responseCode}`);
      }
    } catch (error) {
      throw new Error(`请求发生错误: ${error.message}`);
    }
  }

  // 发起POST请求
  public async post(url: string, params:AllType, headers?: object) {
    const httpRequest = http.createHttp();
    try {
      const response = await httpRequest.request(url,{
        method: http.RequestMethod.POST,
        header: {
          'Content-Type': 'application/json'
        },
        extraData: params,
        readTimeout: CommonConstant.READ_TIMEOUT,
        connectTimeout: CommonConstant.CONNECT_TIMEOUT
      });
      if (response.responseCode === 200) {
        return JSON.stringify(response.result);
      } else {
        throw new Error(`请求失败: ${response.responseCode}`);
      }
    } catch (error) {
      throw new Error(`请求发生错误: ${error.message}`);
    }
  }
}
;

使用示例:

// 使用示例
// 在你的组件或服务中
import {HttpService } from "../common/utils/HttpUtils";
const httpService = HttpService.getInstance();

httpService.get('https://api.example.com/data')
  .then(response => {
    console.log('请求成功:', response);
  })
  .catch(error => {
    console.error('请求失败:', error);
  });

httpService.post('https://api.example.com/submit', { key: 'value' })
  .then(response => {
    console.log('提交成功:', response);
  })
  .catch(error => {
    console.error('提交失败:', error);
  });

在这个封装中,我们创建了一个HttpService类,它使用单例模式来确保全局只有一个实例。这个类提供了getpost方法,分别用于发起GET和POST请求。你可以根据需要添加其他HTTP方法,如PUT、DELETE等。

注意,这个封装假设服务器返回的是JSON格式的数据,并在成功响应时将其解析为JavaScript对象。如果服务器返回的是其他格式的数据,你需要相应地修改解析逻辑。

此外,这个封装没有处理请求超时、重试机制等高级功能。如果你需要这些功能,可以在封装中添加相应的逻辑。

最后,请确保在项目的config.jsonmodule.json5文件中正确配置了网络权限,以便应用能够访问网络


http://www.niftyadmin.cn/n/5692196.html

相关文章

13:URL输入到页面渲染过程

从URL输入到页面渲染的过程是一个复杂而精细的流程,它涉及多个步骤和多个参与方(包括浏览器、DNS服务器、服务器等)。以下是这一过程的详细解析: 一、URL解析与DNS查找 URL解析: 当用户在浏览器中输入一个URL并按下回…

百度飞桨(paddlepaddle)安装

百度飞桨(paddlepaddle)安装 Anaconda升级 打开 Anaconda Prompt (或者 Mac 下的终端),键入: conda upgrade --all pip 安装 python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/s…

C++——模板进阶、继承

文章目录 一、模板1. 非类型模板参数2. 模板的特化函数模板特化类模板特化1. 全特化2. 偏特化部分特化参数更进一步的限制 二、继承1. 概念2. 定义定义格式 3. 继承基类成员访问⽅式的变化4. 继承类模板5.基类和派⽣类间的转换6. 继承中的作⽤域隐藏规则: 7. 派⽣类…

物理学基础精解【55】

文章目录 函数函数及图形绝对值定义性质公式数学原理例题 区间定义性质公式数学原理例题 领域定义性质数学原理例题 绝对值的定理1. 绝对值的定义2. 非负性定理3. 绝对值的唯一性4. 相反数的绝对值相等5. 绝对值的乘法性质6. 绝对值的三角不等式(或称为绝对值的加法…

【Python】数据可视化之聚类图

目录 clustermap 主要参数 参考实现 clustermap sns.clustermap是Seaborn库中用于创建聚类热图的函数,该函数能够将数据集中的样本按照相似性进行聚类,并将聚类结果以矩阵的形式展示出来。 sns.clustermap主要用于绘制聚类热图,该热图通…

设计模式(3)builder

需求: 对于复杂的对象,我们只需要 通过 设置一些参数,就可以得到相对应的 实例。 简单来说, 需求就是用一个类 通过方法返回一个 新建的对象,而且可以通过方法去设置这个对象 public interface CarBuilder {void se…

无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享

你知道怎么下载无水印视频素材吗?今天小编就给大家推荐十个高清无水印视频素材下载的网站,如果你也是苦于下载高清无水印的短视频素材,赶紧来看看吧~ 1. 稻虎网 首推的是稻虎网。这个网站简直就是短视频创作者的宝库。无论你需要…

人工智能专业就业方向与前景

随着产业结构升级的持续推进,未来行业领域对于人工智能专业人才的需求量会逐渐增加,一部分高校也开始陆续在本科阶段开设人工智能专业,以缓解人工智能领域人才缺口较大的问题。下面是小编整理的人工智能专业就业方向与前景,欢迎阅…