鸿蒙应用(医院诊疗系统)开发篇2·Axios网络请求封装全流程解析

一、项目初始化与环境准备

1. 创建鸿蒙工程
src/main/ets/  
├── api/  
│   ├── api.ets       # 接口聚合入口  
│   ├── login.ets     # 登录模块接口  
│   └── request.ets   # 网络请求核心封装  
└── pages/  └── login.ets     # 登录页面逻辑  

通过DevEco Studio新建项目,手动添加生成上面目录结构。

2. 安装axios依赖

在终端执行(必须联网):

ohpm install @ohos/axios  

 作用

        引入与Web端兼容的HTTP库,自动处理鸿蒙系统网络接口适配

二、配置网络权限(关键步骤!)

         修改entry/src/main/module.json5 ,添加内容:

"module": {  "requestPermissions": [  {  "name": "ohos.permission.INTERNET"}  ]  
}  

  常见问题

权限未声明 → 应用崩溃且无网络响应;生产环境需补充ohos.permission.NOTIFICATION 等权限说明

三、核心代码分步实现

1. 网络请求核心层 api/request.ets
//封装axios网络请求模块
import axios,{InternalAxiosRequestConfig,AxiosResponse}from '@ohos/axios'export interface Option_Type{method?:stringurl:stringdata?:objectparams?:objectheaders?:object
}interface Request_dataType{code:numbermessage?:stringdata?:object | null
}const  request = axios.create({//使用const声明baseURL:"http://159.75.169.224:3321/v3pz",// API网关地址headers:{Terminal:"h5"}, // 终端标识(告诉服务器是手机还是电脑访问)timeout:15000///增加超时配置,防止长时间阻塞
})
//请求拦截器优化
request.interceptors.request.use((req:InternalAxiosRequestConfig)=>{req.headers['h-token'] = "d43ff2fe3e5b0927df54662af86d4ac8"return req
})function http(options: Option_Type) {// 获取请求方法,默认使用GETlet method = options.method  || "GET" // 若未指定method则赋默认值// 将GET请求的data参数转为paramsif (method.toLowerCase()  === "get") { // 统一转为小写比较options.params  = options.data  // 将data内容转移到params}// 发送请求return request(options) // 调用axios实例发送请求
}//全局响应处理,统一错误逻辑,接收http结果 → 返回业务数据
export default async function test<T>(options: Option_Type): Promise<T> {// 发送请求并等待响应let result: AxiosResponse<Request_dataType> = await http(options) // 异步等待请求完成// 解构响应数据let res = result.data       // 获取响应主体数据let code = res.code         // 提取状态码console.log(" 输入obj", JSON.stringify(res))  // 开发调试日志console.log("[DEBUG]  响应原始数据:", result); // 打印完整响应对象console.log("[INFO]  解析后的状态码:", res.code);// 状态码判断if (code=== 10000) {return res.data  as T               // 成功时返回数据} else if (code === -2 && res.message  === 'token错误') {throw new Error(res.message)        // 特定错误处理} else {throw new Error(res.message)        // 通用错误处理}}
2. 登录接口层 api/login.ets
//数据模型定义,接口封装
import request from './request'
// 定义登录接口返回数据类型
export interface return_login_type{token:string,userInfo:userInfo
}
// 用户基础信息实体类
export interface userInfo{avatar:string,name:string
}
// 登录请求参数接口
interface login_type{passWord:stringuserName:string
}export function login_submit(data:login_type){return request<return_login_type>({//调用request接口url:'./login' ,// 接口路径method:'post',data})
}
3. 接口聚合层 api/api.ets
// 📎 统一导出所有业务接口(便于模块化管理)  
export * from './login';  
// 后续可添加:  
// export * from './user';  
// export * from './order';  

4. 视图层 pages/login.ets

//页面周期控制,UI框架集成
import { login_submit } from '../api/api';@Entry
@Component
struct login{onPageShow(): void {login_submit({//调用了api/login_submit接口// 模拟用户登录(硬编码账号密码存在安全风险)userName:"18993391234",passWord:"123456"})}build(){}
}


注册账号:http://159.75.169.224:3322

注册后填写信息到代码。

在pages\login.ets使用previewer,得到调试信息

04-16 22:06:26.302   33376-34256   A0c0d0/JSAPP                                          I     输入obj {"code":10000,"message":"success","data":{"token":"00a688216d7c1858fc1b4d3da6a36a8c","userInfo":{"avatar":"http://159.75.169.224:5500/avatar.jpeg","name":"admin"}}}
04-16 22:06:26.302   33376-34256   A0c0d0/JSAPP                                          I     [DEBUG]  响应原始数据: [object Object]
04-16 22:06:26.302   33376-34256   A0c0d0/JSAPP                                          I     [INFO]  解析后的状态码: 10000
 

流程图:

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADAS高级驾驶辅助系统详细介绍

ADAS&#xff08;高级驾驶辅助系统&#xff09;核心模块&#xff0c;通过 “监测→预警→干预” 三层逻辑提升行车安全。用户选择车辆时&#xff0c;可关注传感器配置&#xff08;如是否标配毫米波雷达&#xff09;、功能覆盖场景&#xff08;如 AEB 是否支持夜间行人&#xff…

Prometheus+Grafana+K8s构建监控告警系统

一、技术介绍 Prometheus、Grafana及K8S服务发现详解 Prometheus简介 Prometheus是一个开源的监控系统和时间序列数据库&#xff0c;最初由SoundCloud开发&#xff0c;现已成为CNCF(云原生计算基金会)的毕业项目‌。它专注于实时监控和告警&#xff0c;特别适合云原生和分布式…

MATLAB脚本实现了一个三自由度的通用航空运载器(CAV-H)的轨迹仿真,主要用于模拟升力体在不同飞行阶段(初始滑翔段、滑翔段、下压段)的运动轨迹

%升力体:通用航空运载器CAV-H %读取数据1 升力系数 alpha = [10 15 20]; Ma = [3.5 5 8 10 15 20 23]; alpha1 = 10:0.1:20; Ma1 = 3.5:0.1:23; [Ma1, alpha1] = meshgrid(Ma1, alpha1); CL = readmatrix(simulation.xlsx, Sheet, Sheet1, Range, B2:H4); CL1 = interp2(…

Day09【基于jieba分词和RNN实现的简单中文分词】

基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;词的末尾对应的标签为1&#xff0c;中间部分对应的标签为0&#xff0c;同时将分词后的单词基于中文词表做初步序列…

Linux-服务器添加审计日志功能

#查看audit软件是否在运行(状态为active而且为绿色表示已经在运行) systemctl start auditd #如果没有在运行的话,查看是否被系统禁用 (audit为0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改为audit=1 #更新GRUB…

uniappx项目上架各手机平台

前段时间用uniappx开发的App&#xff0c;领导要求要在各个主要手机平台上上架了&#xff0c;本来不是我的任务&#xff0c;后来其他人没有空交给我了&#xff0c;上架小白一枚&#xff0c;哭唧唧的自己研究吧&#xff0c;根据领导发的账号密码登录各个平台上架&#xff0c;花费…

第4次课 前缀和与差分 A

课堂学习 前缀和数组 前1个收购点&#xff1a;3箱 前2个收购点&#xff1a;325箱 前3个收购点&#xff1a;32510箱 以此类推… 数组a存储10个收购点的箱数。 收购点编号从1~10&#xff0c;数组下标也从1开始使用。 下标0位置直接赋值0 #include<bits/stdc.h> using nam…

MySQL部分总结

mysql学习笔记&#xff0c;如有不足还请指出&#xff0c;谢谢。 外连接&#xff0c;内连接&#xff0c;全连接 外连接&#xff1a;左外、右外 内连接&#xff1a;自己和自己连接 全连接&#xff1a;左外连接右外链接 mysql unique字段 unique可以在数据库层面避免插入相同…

Spring MVC 请求处理流程详解

步骤1&#xff1a;用户发起请求 所有请求首先被 DispatcherServlet&#xff08;前端控制器&#xff09;拦截&#xff0c;它是整个流程的入口。 DispatcherServlet 继承自 HttpServlet&#xff0c;通过 web.xml 或 WebApplicationInitializer 配置映射路径&#xff08;如 /&…

Vue 高级技巧深度解析

Vue 高级技巧深度解析 mindmaproot(Vue2高级技巧)组件通信EventBusprovide/inject$attrs/$listeners性能优化虚拟DOM优化函数式组件按需加载状态管理Vuex模块化持久化存储严格模式高级指令自定义指令动态组件异步组件渲染控制作用域插槽渲染函数JSX支持一、组件通信的进阶之道 …

2024年React最新高频面试题及核心考点解析,涵盖基础、进阶和新特性,助你高效备战

以下是2024年React最新高频面试题及核心考点解析&#xff0c;涵盖基础、进阶和新特性&#xff0c;助你高效备战&#xff1a; 一、基础篇 React虚拟DOM原理及Diff算法优化策略 • 必考点&#xff1a;虚拟DOM树对比&#xff08;同级比较、Key的作用、组件类型判断&#xff09; •…

Zookeeper单机三节点集群部署(docker-compose方式)

前提: 服务器需要有docker镜像zookeeper:3.9.3 或能连网拉取镜像 服务器上面新建文件夹: mkdir -p /data/zk-cluster/{data,zoo-cfg} 创建三个zookeeper配置文件zoo1.cfg、zoo2.cfg、zoo3.cfg,配置文件里面内容如下(三个文件内容一样): tickTime=2000 initLimit=10 …

面试题之数据库-mysql高阶及业务场景设计

最近开始面试了&#xff0c;410面试了一家公司 针对自己薄弱的面试题库&#xff0c;深入了解下&#xff0c;也应付下面试。在这里先祝愿大家在现有公司好好沉淀&#xff0c;定位好自己的目标&#xff0c;在自己的领域上发光发热&#xff0c;在自己想要的领域上&#xff08;技术…

数字内容体验案例解析与行业应用

数字内容案例深度解析 在零售行业头部品牌的实践中&#xff0c;数字内容体验的革新直接推动了用户行为模式的转变。某国际美妆集团通过搭建智能内容中台&#xff0c;将产品信息库与消费者行为数据实时对接&#xff0c;实现不同渠道的动态内容生成。其电商平台首页的交互式AR试…

4.15 代码随想录第四十四天打卡

99. 岛屿数量(深搜) (1)题目描述: (2)解题思路: #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -1}; // 四个方向 void dfs(const vector<vector<int>>& grid, vector<vector<bool&g…

【三维重建与生成】GenFusion:SVD统一重建和生成

标题:《GenFusion: Closing the Loop between Reconstruction and Generation via Videos》 来源&#xff1a;西湖大学&#xff1b;慕尼黑工业大学&#xff1b;上海科技大学&#xff1b;香港大学&#xff1b;图宾根大学 项目主页&#xff1a;https://genfusion.sibowu.com 文章…

Quipus,LightRag的Go版本的实现

1 项目简介 奇谱系统当前版本以知识库为核心&#xff0c;基于知识库可以快构建自己的问答系统。知识库的Rag模块的构建算法是参考了LightRag的算法流程的Go版本优化实现&#xff0c;它可以帮助你快速、准确地构建自己的知识库&#xff0c;搭建属于自己的AI智能助手。与当前LLM…

mysql 8 支持直方图

mysql 8 可以通过语句 ANALYZE TABLE table_name UPDATE HISTOGRAM ON column_name WITH 10 BUCKETS; 生产直方图&#xff0c;解决索引数据倾斜的问题 在之前的mysql5.7的版本上是没有的 参考&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 15.7.3.1 ANALYZE TABL…

力扣-hot100(最长连续序列 - Hash)

128. 最长连续序列 中等 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,…

RCEP框架下eBay日本站选品战略重构:五维解析关税红利机遇

2024年RCEP深化实施背景下&#xff0c;亚太跨境电商生态迎来结构性变革。作为协定核心成员的日本市场&#xff0c;其跨境电商平台正经历新一轮价值重构。本文将聚焦eBay日本站&#xff0c;从政策解读到实操路径&#xff0c;系统拆解跨境卖家的战略机遇。 一、关税递减机制下的…