本项目利用 CodeArts Agent 的智能生成能力,通过自然语言需求驱动,自动化地构建了一个基于 HarmonyOS 的端云协同树洞论坛系统,实现了从需求到应用的高效转化。
| Files | Last commit | Last update |
|---|---|---|
| 18 days ago | ||
| 2 months ago | ||
| 2 months ago | ||
| 2 months ago | ||
| 2 months ago | ||
| 2 months ago | ||
| 2 months ago | ||
| 2 months ago |
树洞留言墙(HarmonyOS 应用 + 华为云 Serverless)
使用 ArkTS、FunctionGraph 和 RDS for MySQL 构建一个支持匿名留言、主题论坛和管理员后台的 HarmonyOS 端云一体化应用。

| 项目 | 内容 |
|---|---|
| 适合谁 | 有 HarmonyOS 或后端基础、想学习端云一体化开发的工程师 |
| 难度与耗时 | 入门 · 新手预计 2.5–3.5 小时 |
| 你将学到 | ArkTS 端侧开发;FunctionGraph 云函数编写规范;APIG 网关与触发器配置;RDS MySQL 表设计与中文编码处理 |
| 你将完成 | 可运行的 HarmonyOS 应用、13 个云函数、5 张数据表及端云联调验收 |
| 验证环境 | HarmonyOS / DevEco Studio / Node.js 18.15 · 最后验证于 2026-08-14 |
1. 案例概览
树洞留言墙是一个匿名倾诉 + 主题论坛的社区型应用,用于演示「HarmonyOS 端侧 + 华为云 Serverless 云侧」的完整端云一体化开发流程。它覆盖了账号注册登录、内容发布、检索与管理,是一次从零搭建可运行端云应用的完整实践;其中沉淀的云函数规范、中文编码处理和网关配置经验,可复用到任何 FunctionGraph + RDS 的后端场景。
核心功能与体验
- 用户用邮箱注册并登录 → 进入留言墙,可匿名发布和浏览留言。
- 用户创建 / 搜索主题论坛并发帖 → 论坛列表按关键字检索,帖子分页展示。
- 用户查看个人发言历史 → 留言墙与论坛发言聚合展示,支持关键字搜索。
- 管理员登录 → 管理留言、论坛和用户,可删除 / 恢复留言、封禁 / 解封论坛与用户。
| 用户个人页 | 管理员页 |
|---|---|
![]() |
![]() |
技术方案一览
flowchart LR
A["HarmonyOS App(ArkTS,6 页面)"] -->|HTTPS| B["APIG 专享版网关"]
B -->|DEDICATEDGATEWAY 触发器| C["FunctionGraph 云函数(Node.js,13 个)"]
C -->|VPC 内网 TCP 3306| D["RDS for MySQL(forum_db,5 张表)"]
一次核心业务操作(如发布留言)的链路:App 通过 APIG 调试域名发起 HTTPS 请求,APIG 按「路径 + 方法」匹配到对应云函数,云函数在 VPC 内网访问 MySQL 完成读写,再把结果原路返回App。端侧不直接连数据库,APIG 是唯一公网入口。
| 层级 | 技术/产品 | 验证版本 | 作用 |
|---|---|---|---|
| 端侧 | ArkTS / ArkUI | DevEco Studio | 6 个页面(登录、留言墙、论坛列表、论坛详情、个人历史、管理员面板) |
| 云侧 | FunctionGraph | Node.js 18.15 | 13 个云函数承载注册、登录、留言、论坛、管理业务 |
| 网关 | APIG 专享版 | — | 统一公网入口,按路径 + 方法路由到函数 |
| 数据 | RDS for MySQL | MySQL | forum_db 库:users / messages / forums / forum_posts / user_tokens |
| 工具 | DevEco / hvigor / hdc | — | 编译、构建与安装 HarmonyOS 应用 |
边界说明
- 本案例面向学习与演示,云侧认证采用
NONE(联调),不包含正式上架所需的鉴权、限流、审计等生产化改造。 - 数据库初始化依赖一次性
db-init函数,生产初始化完成后需禁用或删除其触发器。
2. 开始之前
先确认下面的准备条件,通用安装教程优先参考官方文档。
环境与资源
| 项目 | 要求 | 检查或获取方式 |
|---|---|---|
| 基础知识 | ArkTS、HTTP、数据库基础 | 可选:HarmonyOS 官方 ArkTS 教程 |
| 开发环境 | Windows/macOS、DevEco Studio、Node.js、Python 3.8+ | node -v、python --version、DevEco 界面路径 |
| Python 依赖 | 华为云 SDK(仅自动部署路线需要) | pip install huaweicloudsdkcore huaweicloudsdkfunctiongraph huaweicloudsdkapig |
| 测试设备 | 模拟器或真机 | hdc list targets |
| 账号与服务 | 华为云账号(已实名)、开通 FunctionGraph / APIG / RDS / VPC | 控制台开通,全程同一区域 |
| 权限与网络 | 函数与数据库同 VPC,安全组放通 3306 | VPC 控制台检查连通性 |
费用与配额
| 资源 | 建议规格 | 计费方式 | 实践预计费用 | 结束后如何处理 |
|---|---|---|---|---|
| RDS for MySQL | 入门规格 | 按需 | 数元(按使用时长) | 删除实例 |
| APIG 专享版 | 基础实例 + 弹性 IP | 按需 | 少量(含公网 IP) | 释放实例与 EIP |
| FunctionGraph | 256 MB / 30 s | 按调用 | 少量(免费额度内可能为 0) | 删除函数 |
价格验证日期:2026-08-14。实际价格以华为云价格页为准;使用免费额度时需注意额度与超额风险。
配置与敏感信息
| 占位符 | 含义 | 获取位置 | 安全存放位置 |
|---|---|---|---|
<region> |
区域(如 cn-north-4) | 控制台右上角 | 公开配置 |
<project_id> |
项目 ID | 「我的凭证」→ 项目列表 | 公开配置 |
<vpc_id> / <subnet_id> / <security_group_id> |
网络资源 | VPC 控制台 | 公开配置 |
<db_host> / <db_user> / <db_password> |
数据库连接 | RDS 实例详情 | .env / 服务端环境变量 |
<apig_domain> |
APIG 调试域名 | APIG 分组详情 | 端侧公开配置 |
<apig_instance_id> / <apig_group_id> |
APIG 实例 / 分组 ID(自动部署) | APIG 实例与分组详情 | 公开配置 |
<ak> / <sk> |
IAM 访问密钥 | 仅自动部署路线需要 | 仅 .env(git 忽略) |
.env、签名私钥、部署请求体和本地产物必须加入.gitignore。- 客户端不得包含 AK/SK、数据库密码或长期共享密钥。
3. 快速体验
这条路线面向「先把现成案例跑起来」的读者,目标是在约 1–2 小时(含一次性云环境准备)看到第一个成功结果。原理和完整搭建过程见完整实践。
0)用 AI 辅助配置云环境(可选)
想跳过下面的手动步骤?把本仓库 README.md 与 SKILL.md 交给 AI 编程助手(码道 / CodeArts、Cursor 等),让它读完自动配置并部署云环境:
请阅读本仓库 README.md 与 SKILL.md,帮我自动配置并部署「树洞留言墙」云环境:
1. 按第 2 章「配置与敏感信息」列出需要我填写的占位符(AK/SK、区域、VPC、数据库、APIG 等),等我填好 harmony_cloud/deploy/.env;
2. 打包 13 个云函数为 ZIP(根目录直接是 index.js,不套层);
3. 运行 deploy.py 与 setup_apig_apis.py 部署云侧,再调用 db-init 建表;
4. 把 APIG 调试域名填入 Config.ets,编译并安装端侧;
5. 按第 5 章验收表逐项联调。
每完成一步报告结果;报错时贴完整日志并定位根因;凭据只写本地 .env,不写入代码、不提交仓库。
注意:AI 只能操作你授权的环境。AK/SK、数据库密码等敏感信息请只放在本地
.env(已被.gitignore忽略),不要让 AI 把凭据写进代码或提交。部署完成后,仍建议按下面各步骤的「完成标志」人工复核一遍。
1)获取已验证版本
git clone https://gitcode.com/harmony-practice-center/treehole.git
cd treehole
完成标志:根目录存在 README.md、harmony_app/ 和 harmony_cloud/。
2)准备最小配置
cp harmony_cloud/deploy/.env.example harmony_cloud/deploy/.env
- 将
.env中的 AK/SK、区域、VPC、数据库、APIG 占位符替换为第 2 章收集的值。 - 在
harmony_app/entry/src/main/ets/utils/Config.ets填入BASE_URL(APIG 调试域名)。
完成标志:没有未替换占位符;敏感配置不会出现在 git status 中。
3)打包 13 个云函数
仓库不内置 ZIP 产物、也不提交
node_modules(已在.gitignore中忽略),部署前需自行打包:每个函数目录执行npm install后打成 ZIP,放到harmony_cloud/deploy/zips/,文件名与函数名一致(根目录直接是index.js,不套层)。
cd harmony_cloud/functions
mkdir -p ../deploy/zips
for d in register login postMessage getMessages createForum searchForums \
postForumPost getForumPosts getUserHistory adminManageMessage \
adminManageForum adminBanUser db-init; do
(cd "$d" && npm install && zip -r "../../deploy/zips/$d.zip" .)
done
Windows 用户注意:上面的命令依赖
zip,而 Windows 默认不带(Git for Windows 通常也没有zip.exe,运行会报zip: command not found)。Windows 下请改用 PowerShell 自带的Compress-Archive(无需额外安装):
cd harmony_cloud\functions
New-Item -ItemType Directory -Force ..\deploy\zips | Out-Null
$funcs = 'register','login','postMessage','getMessages','createForum','searchForums',
'postForumPost','getForumPosts','getUserHistory','adminManageMessage',
'adminManageForum','adminBanUser','db-init'
foreach ($d in $funcs) {
Set-Location $d
npm install
Compress-Archive -Path * -DestinationPath "..\..\deploy\zips\$d.zip" -Force
Set-Location ..
}
若仍想用
zip,可先安装 Info-ZIP(如choco install zip),或改用 WSL / macOS / Linux 环境。npm install需逐个函数目录执行,网络不佳时会较慢;打包后请确认每个 ZIP 根目录直接是index.js(不套外层文件夹)。
完成标志:harmony_cloud/deploy/zips/ 下存在 13 个 ZIP,每个 ZIP 根目录含 index.js、db.js、package.json 和 node_modules/mysql2、node_modules/iconv-lite。
4)启动云侧
cd harmony_cloud/deploy
python deploy.py # 创建函数 + 上传代码 + 配置 VPC/环境变量
python setup_apig_apis.py # 建 APIG API 并发布 RELEASE(主路径)
curl -X POST "https://<apig_domain>/treehole/db-init" \
-H "Content-Type: application/json" -d '{"file":"all"}'
主路径用
setup_apig_apis.py,setup_vpc_and_triggers.py作为备选
完成标志:调用 db-init 后数据库存在 5 张表,管理员 admin@example.com / 654321 已写入。
5)构建并运行端侧
Set-Location 'harmony_app'
ohpm install
hvigorw assembleHap --mode module -p module=entry -p product=default -p buildMode=debug --no-daemon
hdc install -r entry/build/default/outputs/default/entry-default-unsigned.hap
完成标志:生成 HAP 并安装到设备,应用能启动到登录页并完成一次登录。
4. 完整实践
这条路线面向「理解并复现案例」的读者。步骤按真实工作流排列,每一步都有可观察的完成标志。云函数编写规范、代码模板、打包与排障细节见 SKILL.md。
一句话让 AI 工作
不想手动逐项操作?把下面这句话发给码道(华为云 CodeArts 鸿蒙开发智能体,或任意支持 HarmonyOS / Node.js 的 AI 编程助手),即可让它从需求澄清一路推进到端云联调。你也可以把规模、功能换成自己的版本。
我想开发一款「树洞留言墙」HarmonyOS 端云一体化应用:端侧 ArkTS/ArkUI,云侧华为云 FunctionGraph + APIG 专享版 + RDS for MySQL,支持邮箱注册登录、匿名留言墙、主题论坛(发帖/检索/分页)、个人历史聚合、管理员后台(删除/恢复留言、封禁/解封论坛与用户)。
请按照标准研发流程推进:先提问澄清需求,再依次产出 requirements.md、design.md、tasks.md;然后分批实现 13 个云函数(注意双参数 handler、Base64+GBK 中文解码、连接池、字符集、密码哈希)、5 张表的建表 SQL 和 6 个端侧页面;最后给出部署(deploy.py + APIG 触发器)与端云联调验收步骤。
每一步都要有可观察的完成标志,关键节点停下来等我确认。
如何指挥 AI 工作
「一句话」只是开工信号,真正决定质量的是后续每一轮的指挥方式:
- 一次只给一个明确目标:每轮指令聚焦单一产出(需求 / 设计 / 任务 / 某一批代码 / 部署),让 AI 给出可观察结果,而不是一次铺开。
- 要求可观察的完成标志:每步都让 AI 明确「做完是什么样子」,你据此判断能否进入下一步。
- 关键节点人工确认:需求澄清、技术选型、云资源配置、部署上线等不可逆或高成本节点,先看 AI 的方案再放行。
- 把真实报错带回去:编译或部署失败时,把完整日志原文贴给 AI 定位,而不是让它凭空猜测。
下面的步骤 1–5 每一步都附了「推荐指令」,可照此逐条指挥 AI;想对照手动操作时,看同一步骤的「操作」。
步骤 1:开通云服务并收集信息
目标:开通 FunctionGraph / APIG / RDS / VPC,并收集部署所需的全部资源 ID。
为什么这样做:后续所有云侧资源的创建都依赖这些 ID;用同一账号、同一区域、同一 VPC 能避免内网不可达和跨区调用问题。
推荐指令:
请帮我梳理这个案例要开通的云服务和要收集的资源信息:FunctionGraph、APIG 专享版、RDS for MySQL、VPC,以及区域、项目 ID、VPC/子网/安全组、数据库连接、APIG 调试域名、IAM AK/SK 等占位符。把每一项的获取位置和安全存放位置整理成一张表,并给出同账号、同区域、同 VPC 的开通注意事项。
操作:
- 完成华为云账号注册与实名认证。
- 在目标区域(如
cn-north-4)开通 FunctionGraph、APIG 专享版、RDS、VPC。 - 若走自动部署路线,创建 IAM 访问密钥(AK/SK)并授权相关服务权限。
- 按第 2 章的「配置与敏感信息」表逐项收集并记录。
完成标志:信息清单全部填齐,<region> / <project_id> / <vpc_id> / <subnet_id> / <db_host> 等均可用。
如果失败:最常见的失败是区域不一致或 IAM 权限不足(FSS.0403),见验收与排障。
步骤 2:编写并打包 13 个云函数
目标:在本地把 13 个云函数代码写对,并打成可部署的 ZIP。
为什么这样做:云函数代码有一组必须遵守的约束(双参数 handler、Base64 + GBK 解码、连接池、字符集、密码哈希等),否则部署后必然出问题。
推荐指令:
请按云函数编写规范实现 13 个云函数(register、login、postMessage、getMessages、createForum、searchForums、postForumPost、getForumPosts、getUserHistory、adminManageMessage、adminManageForum、adminBanUser、db-init)。注意:handler 双参数、Base64+GBK 中文解码、mysql2 连接池、utf8mb4 字符集、PBKDF2-SHA256 密码哈希、统一 {code,data,message} 返回。完成后给出每个函数的打包命令与 ZIP 目录结构(根目录直接是 index.js,不套层)。
操作:
- 按 SKILL.md 的「云函数编写规范」与「代码模板」编写 13 个函数。
- 每个函数目录执行
npm install,再打成 ZIP 放到harmony_cloud/deploy/zips/{函数名}.zip(根目录直接是index.js,不套层)。
完成标志:13 个 ZIP 产物就绪,每个 ZIP 根目录含 index.js、db.js、package.json 和 node_modules/mysql2、node_modules/iconv-lite。
如果失败:Cannot find module 'mysql2/promise' 说明依赖没打进 ZIP,重新打包即可。
步骤 3:部署云侧(手动或自动,二选一)
目标:把 13 个函数部署到华为云,配置 VPC、环境变量和 APIG 触发器,并初始化数据库。
为什么这样做:手动路线便于逐项确认资源状态,自动路线适合批量复用;两条路线产出相同,交叉创建同名资源会导致冲突。
推荐指令:
请编写部署自动化脚本:deploy.py 负责创建函数、上传代码、配置 VPC 与 5 个环境变量(DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME),setup_apig_apis.py 负责创建并发布 APIG API(按「路径 + 方法」路由,发布到 RELEASE)。同时给出 db-init 建表与种子数据(含管理员 admin@example.com / 654321)的调用方式,以及 VPC 内网访问 MySQL 的安全组配置要点。
操作:
- 选择一条路线:手动在控制台逐项创建(见 SKILL 的「APIG 集成」),或自动用 Python SDK(见 SKILL 的「部署自动化关键点」)。自动路线主路径用
setup_apig_apis.py,setup_vpc_and_triggers.py作为备选。 - 为函数配置 5 个环境变量(DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME)并绑定数据库所在 VPC。
- 创建 APIG 触发器并按「路径 + 方法」发布到
RELEASE。 - 调用
db-init完成建表与种子数据。
完成标志:13 个接口调用全部返回 code:0,数据库存在 5 张表。
如果失败:中文乱码、APIG.0101、FSS.1020 等最常见问题见 SKILL 的「全量故障速查表」。
步骤 4:配置、编译并安装端侧
目标:把 APIG 调试域名填入端侧,编译并安装 HAP。
为什么这样做:端侧通过 BASE_URL 指向云侧入口;SDK 版本、工具链路径等环境问题会阻塞编译。
操作:
- 在
Config.ets填入BASE_URL(只填域名,不含函数路径)。 - 核对 SDK 版本、
local.properties与DEVECO_SDK_HOME。 - 执行
ohpm install+hvigorw assembleHap编译,再用hdc install安装。
完成标志:App 图标出现,能启动到登录页。
如果失败:00303217(缺 SDK 环境变量)、00308018 EPERM(路径被改写)、路径含空格等问题见 SKILL 的「端侧编译注意」。
步骤 5:端云联调验收
目标:端到端走通核心业务,确认中英文数据正确。
为什么这样做:这是验证「命令提交成功 ≠ 部署完成」的关键一步,只有实际调用通过才算完成。
操作:按第 5 章的业务验收表逐项执行。
完成标志:第 5 章验收项全部通过,中文留言 / 论坛 / 帖子无乱码。
5. 验收与排障
业务验收
| # | 操作 | 预期结果 | 证据/检查方式 |
|---|---|---|---|
| 1 | 用 admin@example.com / 654321 登录 | 进入留言墙(管理员可见管理入口) | 端侧页面截图 |
| 2 | 新用户注册(邮箱 + 6 位以上密码) | 提示「注册成功」,可登录 | 接口返回 code:0 |
| 3 | 发布中文留言 | 「留言成功」,列表显示正确中文 | 列表无 � 乱码 |
| 4 | 创建中文论坛并发帖 | 「论坛创建成功」,内容中文正确 | 列表展示正确 |
| 5 | 关键字搜索论坛 / 历史发言 | 返回匹配结果 | 搜索结果截图 |
| 6 | 管理员删除 / 恢复留言、封禁 / 解封 | 状态正确变化,被封用户登录被拒 | 接口响应 + 端侧提示 |
技术检查与验收环境
| 项目 | 内容 |
|---|---|
| 验证日期 | 2026-08-14 |
| 分支/标签/提交 | main |
| 设备与系统 | mobile / HarmonyOS 6.1.0 |
| 云区域与关键版本 | FunctionGraph Node.js 18.15 / APIG 专享版 / RDS MySQL |
| 验收结论 | 已验收 |
高频问题
| 现象/错误码 | 环节 | 常见原因 | 处理与恢复标志 |
|---|---|---|---|
中文变 � 或 ä½ å¥½ |
云函数 | 字符集配置错误或 APIG GBK 转换 | 检查 charset 与 iconv-lite 回退,见 SKILL |
APIG.0101 |
网关 | 未发布 / 方法路径不符 | 发布 RELEASE 并核对 GET/POST |
FSS.1020 |
部署 | VPC 委托用错字段 | 用 xrole(VPC FullAccess) |
00303217 / 00308018 |
编译 | 缺 SDK 环境变量 / 路径被改写 | 补 DEVECO_SDK_HOME / 修正 sdk.dir |
排查顺序:环境与版本 → 配置与权限 → 网络与资源状态 → 云侧日志 → 接口响应 → 端侧日志。
完整故障库:SKILL.md 的「全量故障速查表」。
6. 安全与清理
实验配置与生产要求
| 项目 | 本案例演示配置 | 生产要求 |
|---|---|---|
| API 认证 | NONE(匿名) |
正式鉴权、限流、审计 |
| 网络 | APIG 调试域名 | HTTPS、自有域名、证书 |
| 凭据 | 环境变量明文(联调) | 密钥管理、最小权限、轮换 |
| 数据 | 演示数据 + 种子账号 | 隐私、备份、保留与删除策略 |
清理资源
清理会删除实验资源和数据。先核对资源名称、区域、项目和依赖关系,并导出需要保留的数据。
- 禁用或删除
db-init函数的 APIG 触发器。 - 删除 13 个云函数。
- 删除 APIG 实例并释放弹性 IP。
- 删除 RDS 实例。
- 撤销临时 AK/SK 权限,删除本地
.env和脱敏前日志。
完成标志:计费控制台中不再存在本案例的持续计费资源,临时凭据已撤销。
7. 项目导览与进阶
关键目录
treehole/
├── README.md # 案例入口与学习主线
├── SKILL.md # 可复用技巧、代码模板与排障知识
├── harmony_app/ # HarmonyOS 端侧工程
└── harmony_cloud/ # 云侧工程
├── database/ # 建表 DDL(4 张表)与种子数据;user_tokens 表由 db-init 创建
├── deploy/ # 自动部署脚本与 .env 模板
└── functions/ # 13 个业务云函数 + echo(调试回显)+ shared(共享 DB 模块)
完成回顾
完成本案例后,你已经:
- 掌握 ArkTS 端侧开发与端云联调的完整流程。
- 掌握 FunctionGraph 云函数编写规范(含中文编码处理、连接池、密码哈希)。
- 掌握 APIG 网关与触发器配置、RDS MySQL 表设计与初始化。
- 交付一个可运行的匿名留言墙 + 论坛 + 管理员后台应用。
深入阅读与扩展
- SKILL.md —— 云函数规范、代码模板、全量排障与复用清单
- 扩展方向:为 APIG 接入正式鉴权、把数据库凭据迁移到密钥管理、为
db-init增加幂等保护。
8. 参考与维护
官方资料与帮助
维护与版本
| 项目 | 内容 |
|---|---|
| 维护团队 | 鸿蒙实践案例开发团队 |
| 当前案例版本 | v1.0.0 |
| 最后验证日期 | 2026-08-14 |
| 兼容范围 | FunctionGraph Node.js 18.15 / APIG 专享版 / RDS MySQL |
许可证
本案例采用 MIT License。第三方依赖及素材遵循各自许可证。
Introduction
本项目利用 CodeArts Agent 的智能生成能力,通过自然语言需求驱动,自动化地构建了一个基于 HarmonyOS 的端云协同树洞论坛系统,实现了从需求到应用的高效转化。
Customize your domain
