本项目借助 CodeArts Agent 的需求解析与代码生成能力,以自然语言为唯一输入,自动化完成了一款 HarmonyOS 端云协同单词打卡App的构建,涵盖用户认证、每日打卡、学习进度云端同步等核心功能。
Access rate limit exceeded. Please log in to continue.
单词打卡学习(HarmonyOS 应用 + Appwrite Serverless)
使用 ArkTS 和 Appwrite 自托管 Functions 构建一个卡片式单词打卡应用,支持闪卡学习、看词选义测试、进度条与连续打卡。

| 项目 | 内容 |
|---|---|
| 适合谁 | 有 HarmonyOS 或后端基础、想学习 Appwrite 端云一体化开发的工程师 |
| 难度与耗时 | 入门 · 新手预计 1.5–2.5 小时 |
| 你将学到 | ArkTS 端侧开发;Appwrite Functions 编写规范;NoSQL 文档数据库设计;Appwrite 自托管部署与排障 |
| 你将完成 | 可运行的 HarmonyOS 应用、6 个云函数、3 个数据集合(58 词词库)及端云联调验收 |
| 验证环境 | HarmonyOS / DevEco Studio / Appwrite 自托管 v1.9.0 · 最后验证于 2026-08-14 |
1. 案例概览
单词打卡学习是一个卡片式背单词应用,演示「HarmonyOS 端侧 + Appwrite 自托管 Serverless 云侧」的端云一体化开发流程。与华为云 FunctionGraph/APIG 方案不同,Appwrite 用内建 HTTP 路由 + 文档型 NoSQL,省去了独立 API 网关层。本案例覆盖闪卡学习、测试、打卡统计等完整闭环, 沉淀的 Appwrite Functions 规范与自托管排障经验可复用到其他 Appwrite 后端场景。
核心功能与体验
- 用户注册并登录 → 进入首页,醒目位置显示今日打卡状态与连续打卡天数。
- 首页展示今日 10 个未学单词 → 进入闪卡模式,点击卡片翻转查看释义。
- 完成看词选义测试 → 答对计入学习进度,进度条更新。
- 学完一个单词 → 打卡状态变为「已完成」,连续天数正确累加。
| 单词打卡页 | 单词测试页 |
|---|---|
![]() |
![]() |
技术方案一览
flowchart LR
A["HarmonyOS App(ArkTS,4 页面)"]
B["Appwrite Functions(Node.js 16,6 个)"]
C["Appwrite Database(word_db,文档型 NoSQL)"]
A -->|"POST /v1/functions/{id}/executions"| B
B --> C
一次核心业务操作(如记录学习)的链路:App 通过 POST /v1/functions/{id}/executions 调用
Function 执行端点,Function 用 Server SDK(API Key)读写 Database,再把结果包在
responseBody 里返回 App。端侧不直接持有数据库凭据,Function 执行端点是唯一入口。
| 层级 | 技术/产品 | 验证版本 | 作用 |
|---|---|---|---|
| 端侧 | ArkTS / ArkUI | DevEco Studio | 4 个页面(登录、首页、闪卡、测试) |
| 云侧 | Appwrite Functions | 自托管 v1.9.0 / Node.js 16 | 6 个函数承载注册、登录、取词、进度、学习记录 |
| 数据 | Appwrite Database | 文档型 NoSQL | word_db 库:users_col / words_col / learn_records_col |
| 工具 | DevEco / hvigor / hdc | — | 编译、构建与安装 HarmonyOS 应用 |
边界说明
- 本案例面向学习与演示,函数
execute=["any"]为无鉴权公开访问,不包含正式上架所需的鉴权、限流等生产化改造。 - 自托管 Appwrite 的可用运行时取决于服务器配置,部署前需确认
node-16.0可用。
2. 开始之前
先确认下面的准备条件,通用安装教程优先参考官方文档。
环境与资源
| 项目 | 要求 | 检查或获取方式 |
|---|---|---|
| 基础知识 | ArkTS、HTTP、数据库基础 | 可选:HarmonyOS 官方 ArkTS 教程 |
| 开发环境 | Windows/macOS、DevEco Studio、Node.js、Python 3.8+ | node -v、python --version、DevEco 界面路径 |
| Python 依赖 | 无(deploy.py 仅用标准库) |
无需 pip install |
| 测试设备 | 模拟器或真机 | hdc list targets |
| 账号与服务 | 自托管 Appwrite 服务器可达、项目与 API Key 已建 | GET /v1/health 返回 pass |
| 权限与网络 | 服务器 80 端口可达;API Key 含 functions/databases 权限 | GET /v1/functions 正常返回 |
费用与配额
| 资源 | 建议规格 | 计费方式 | 实践预计费用 | 结束后如何处理 |
|---|---|---|---|---|
| Appwrite 自托管 | 单机服务器 | 自托管 | 服务器自身成本 | 删除测试函数与集合 |
价格验证日期:2026-08-14。自托管方案无按量计费的云资源,主要成本为承载服务器的费用。
配置与敏感信息
| 占位符 | 含义 | 获取位置 | 安全存放位置 |
|---|---|---|---|
APPWRITE_HOST |
服务器地址 | 服务器 IP + 端口 | 端侧公开配置 |
<project_id> |
Appwrite 项目 ID | 控制台 → 项目设置 | 端侧公开配置 |
<api_key> |
服务器级 API Key | 控制台 → API Keys | 仅函数环境变量 / .env |
.env、签名私钥、部署请求体和本地产物必须加入.gitignore。- 客户端不得包含 API Key;函数用 Server SDK 在服务端持有。
3. 快速体验
这条路线面向「先把现成案例跑起来」的读者,目标是约 1–2 小时(含一次性云环境准备)内看到第一个成功结果。原理和完整搭建过程见完整实践。
0)用 AI 辅助配置云环境(可选)
想跳过下面的手动步骤?把本仓库 README.md 与 SKILL.md 交给 AI 编程助手(码道 / CodeArts、Cursor 等),让它读完自动配置并部署云环境:
请阅读本仓库 README.md 与 SKILL.md,帮我自动配置并部署「单词打卡」云环境:
1. 按第 2 章「配置与敏感信息」列出需要我填写的占位符(Appwrite 地址、Project ID、API Key),等我填好 harmony_cloud/.env;
2. 运行 deploy/deploy.py 部署 6 个云函数(自动 npm install 并打包 tar.gz);
3. 调用 db-init 建集合与种子数据;
4. 把服务器地址与 Project ID 填入 HttpUtil.ets,编译并安装端侧;
5. 按第 5 章验收表逐项联调。
每完成一步报告结果;报错时贴完整日志并定位根因;API Key 只写本地 .env,不写入代码、不提交仓库。
注意:AI 只能操作你授权的环境。API Key 等敏感信息请只放在本地
.env(已被.gitignore忽略),不要让 AI 把凭据写进代码或提交。部署完成后,仍建议按下面各步骤的「完成标志」人工复核一遍。
1)获取已验证版本
git clone https://gitcode.com/harmony-practice-center/word-check-in.git
cd word-check-in
完成标志:根目录存在 README.md、harmony_app/ 和 harmony_cloud/。
2)准备最小配置
cp harmony_cloud/.env.example harmony_cloud/.env
- 将
.env中的 API Key、APPWRITE_HOST、Project ID 替换为第 2 章收集的值。 - 在
harmony_app/entry/src/main/ets/utils/HttpUtil.ets填入APPWRITE_HOST和PROJECT_ID。
完成标志:没有未替换占位符;敏感配置不会出现在 git status 中。
3)启动云侧
cd harmony_cloud
python deploy/deploy.py
curl -X POST http://<host>/v1/functions/db-init/executions \
-H "Content-Type: application/json" \
-H "X-Appwrite-Project: <project_id>" \
-d '{"body":"{}","async":false}'
deploy.py会为每个函数自动执行npm install --omit=dev并打包依赖,无需手动安装node-appwrite。
完成标志:db-init 执行后,word_db 下 3 个集合、58 个单词和管理员 admin@company.com / 123456 已创建。
4)构建并运行端侧
首次编译前,先用 DevEco Studio 打开
harmony_app目录,让它自动生成local.properties(填入sdk.dir);命令行编译还需设置环境变量DEVECO_SDK_HOME。缺失会报00303217,sdk.dir被改写会报00308018,路径含空格会报Space is not supported in HVIGOR_USER_HOME。详见 SKILL.md 的「全量故障速查表」。
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(登录、首页、闪卡、测试 4 个页面),云侧 Appwrite 自托管 Functions(Node.js,6 个云函数)+ Appwrite Database(word_db,3 个集合、58 词词库),支持注册登录、每日单词列表、闪卡翻转学习、看词选义测试、进度条与连续打卡。
请按照标准研发流程推进:先提问澄清需求,再依次产出 requirements.md、design.md、tasks.md;然后分批实现 6 个云函数(注意 ESM 默认导出、node-appwrite v11、execute=["any"])、3 个集合的数据模型和端侧页面;最后给出部署(deploy.py 打包上传)与端云联调验收步骤。
每一步都要有可观察的完成标志,关键节点停下来等我确认。
如何指挥 AI 工作
「一句话」只是开工信号,真正决定质量的是后续每一轮的指挥方式:
- 一次只给一个明确目标:每轮指令聚焦单一产出(需求 / 设计 / 任务 / 某一批代码 / 部署),让 AI 给出可观察结果,而不是一次铺开。
- 要求可观察的完成标志:每步都让 AI 明确「做完是什么样子」,你据此判断能否进入下一步。
- 关键节点人工确认:需求澄清、技术选型、Appwrite 配置、部署上线等不可逆或高成本节点,先看 AI 的方案再放行。
- 把真实报错带回去:编译或部署失败时,把完整日志原文贴给 AI 定位,而不是让它凭空猜测。
下面的步骤 1–5 每一步都附了「推荐指令」,可照此逐条指挥 AI;想对照手动操作时,看同一步骤的「操作」。
步骤 1:确认 Appwrite 服务器与收集信息
目标:确认自托管 Appwrite 可用,收集 Project ID 与 API Key。
为什么这样做:自托管环境的可用运行时与端口取决于运维配置,先确认能避免后续部署返工。
推荐指令:
请帮我梳理这个案例需要确认的 Appwrite 环境信息:服务器地址、Project ID、API Key(含 functions 读写、databases 读写权限)、可用运行时(node-16.0)。把每项的获取位置和安全存放位置整理成表,并给出 /v1/health、/v1/functions/runtimes 等健康检查与权限验证方式。
操作:
- 访问
/v1/health确认服务器pass。 - 在控制台创建项目,记录 Project ID。
- 创建 API Key(含 functions.write/read、databases.write/read 权限)。
- 调用
GET /v1/functions/runtimes确认可用运行时(本例node-16.0)。
完成标志:信息清单填齐,APPWRITE_HOST / <project_id> / <api_key> 均可用。
如果失败:missing scopes (["projects.read"]) 说明 API Key 权限不足,用 GET /v1/functions 验证,见验收与排障。
步骤 2:编写并打包 6 个云函数
目标:在本地把 6 个云函数代码写对,并装好依赖备打包。
为什么这样做:Appwrite v1.9.0 不会自动安装依赖,且函数入口用 ESM 默认导出,写错会导致运行时报错。
推荐指令:
请按 Appwrite Functions 编写规范实现 6 个云函数(register、login、getDailyWords、learnWord、getProgress、db-init)。注意:ESM 默认导出、node-appwrite@^11.0.0(Node 16 兼容)、Server SDK 用 API Key 读写数据库、统一 {code,data,msg} 返回。完成后给出每个函数的依赖安装与 tar.gz 打包要求(根目录含 main.js + node_modules)。
操作:
- 按 SKILL.md 的「云函数编写规范」与「代码模板」编写 6 个函数。
- 每个函数目录执行
npm install --omit=dev(依赖node-appwrite@^11.0.0)。
完成标志:6 个函数目录都含 main.js、package.json 和 node_modules/node-appwrite。
如果失败:EBADENGINE 说明 node-appwrite v14 与 Node 16 不兼容,降级到 ^11.0.0。
步骤 3:部署云侧(手动或自动,二选一)
目标:把 6 个函数部署到 Appwrite,配置环境变量与 execute=["any"],并初始化数据库。
为什么这样做:手动路线便于逐项确认权限与运行时,自动路线适合批量复用;两条路线产出相同,交叉创建同名资源会导致冲突。
推荐指令:
请编写部署脚本 deploy.py(为每个函数执行 npm install --omit=dev 并打包成 tar.gz 上传),并说明 db-init 建集合与种子数据(3 个集合、58 个单词、管理员 admin@company.com / 123456)的执行方式。同时给出为每个函数配置 API_KEY、DATABASE_ID 环境变量与 execute=["any"] 的要点。
操作:
- 选择一条路线:手动在控制台逐项创建,或自动用 Python 脚本(见 SKILL 的「部署与打包」)。
- 为每个函数设
API_KEY、DATABASE_ID环境变量,并显式设execute=["any"]。 - 打包
.tar.gz上传(根目录含main.js+node_modules)。 - 调用
db-init完成建库、建集合与种子数据。
完成标志:6 个函数调用全部返回 code:0,word_db 下 3 个集合与 58 个单词就绪。
如果失败:storage_file_type_unsupported(传了 .zip)、Param "functionId" is not optional(functionId 放错位置)等见 SKILL 的「全量故障速查表」。
步骤 4:配置、编译并安装端侧
目标:把服务器地址与 Project ID 填入端侧,编译并安装 HAP。
为什么这样做:端侧通过 HttpUtil.ets 指向 Appwrite 执行端点;SDK 版本、工具链路径等环境问题会阻塞编译。
推荐指令:
请实现端侧 ArkTS 工程:在 HttpUtil.ets 统一配置 APPWRITE_HOST(http:// 协议)与 PROJECT_ID,并确认 functionId 映射与部署一致;4 个页面(登录、首页、闪卡、测试)通过函数执行端点调用云侧。注意配置 ohos.permission.INTERNET 权限;编译前核对 SDK 版本与 DEVECO_SDK_HOME,遇报错先定位根因再做最小修改。
操作:
- 在
HttpUtil.ets填入APPWRITE_HOST(http://协议)和PROJECT_ID,确认 functionId 映射与部署一致。 - 核对 SDK 版本、
local.properties与DEVECO_SDK_HOME,并配置ohos.permission.INTERNET权限。 - 执行
ohpm install+hvigorw assembleHap编译,再用hdc install安装。
完成标志:App 图标出现,能启动到登录页。
如果失败:00303217(缺 SDK 环境变量)、路径含空格(Space is not supported in HVIGOR_USER_HOME)等见 SKILL 的「端侧集成」。
步骤 5:端云联调验收
目标:端到端走通核心业务,确认学习进度与打卡状态正确。
为什么这样做:这是验证「命令提交成功 ≠ 部署完成」的关键一步,只有实际调用通过才算完成。
推荐指令:
请给我一份端云联调验收清单:逐项列出注册/登录、查看今日单词、闪卡翻转、看词选义测试、打卡状态与连续天数等操作与预期结果。并在模拟器/真机上执行一轮自动测试,逐项记录结果;发现问题先定位相关代码,修复后做针对性回归。
操作:按第 5 章的业务验收表逐项执行。
完成标志:第 5 章验收项全部通过,打卡与进度数据正确。
5. 验收与排障
业务验收
| # | 操作 | 预期结果 | 证据/检查方式 |
|---|---|---|---|
| 1 | 用 admin@company.com / 123456 登录 | 进入首页,显示打卡状态和连续天数 | 端侧页面截图 |
| 2 | 新用户注册(邮箱 + 密码) | 提示「注册成功」,可登录 | 接口返回 code:0 |
| 3 | 首页查看今日单词列表 | 显示 10 个未学单词 | 列表展示 |
| 4 | 闪卡模式点击翻转 | 卡片翻转显示释义,动画流畅 | 端侧演示 |
| 5 | 完成看词选义测试 | 答对计入学习进度 | 进度条变化 |
| 6 | 学习一个单词后查看打卡 | 打卡状态「已完成」,连续天数正确 | 端侧展示 + 接口响应 |
技术检查与验收环境
| 项目 | 内容 |
|---|---|
| 验证日期 | 2026-08-14 |
| 分支/标签/提交 | main |
| 设备与系统 | mobile / HarmonyOS 6.1.0 |
| 云区域与关键版本 | Appwrite 自托管 v1.9.0 / node-16.0 |
| 验收结论 | 已验收 |
高频问题
| 现象/错误码 | 环节 | 常见原因 | 处理与恢复标志 |
|---|---|---|---|
Runtime "node-18.0" is not supported |
部署 | 自托管未启用该运行时 | 改 node-16.0,先查 runtimes |
Cannot find package 'node-appwrite' |
云函数 | 依赖未打包 | npm install --omit=dev 后重打 tar.gz |
storage_file_type_unsupported |
部署 | 传了 .zip |
打 .tar.gz |
| 前端调用 401 | 权限 | execute 不是 public |
设 execute=["any"] |
排查顺序:环境与版本 → 配置与权限 → 网络与资源状态 → 云侧日志 → 接口响应 → 端侧日志。
完整故障库:SKILL.md 的「全量故障速查表」。
6. 安全与清理
实验配置与生产要求
| 项目 | 本案例演示配置 | 生产要求 |
|---|---|---|
| API 认证 | execute=["any"] 公开执行 |
应用层鉴权、execute=["users"]、限流 |
| 网络 | HTTP(80 端口) | HTTPS、TLS 反代、证书 |
| 凭据 | 环境变量 + .env |
密钥管理、最小权限、轮换 |
| 数据 | 演示数据 + 种子账号 | 隐私、备份、保留与删除策略 |
清理资源
清理会删除实验资源和数据。先核对项目、函数与集合的依赖关系,并导出需要保留的数据。
- 禁用或删除
db-init函数。 - 删除 6 个测试函数。
- 删除
word_db下的 3 个集合。 - 吊销测试 API Key。
- 删除本地
.env和脱敏前日志。
完成标志:控制台中不再存在本案例的测试函数与集合,临时 API Key 已吊销。
7. 项目导览与进阶
关键目录
word-check-in/
├── README.md # 案例入口与学习主线
├── SKILL.md # 可复用技巧、代码模板与排障知识
├── harmony_app/ # HarmonyOS 端侧工程
└── harmony_cloud/ # 云侧工程
├── .env.example # 环境变量模板
├── functions/ # 6 个云函数
└── deploy/ # 部署脚本
完成回顾
完成本案例后,你已经:
- 掌握 ArkTS 端侧开发与端云联调的完整流程。
- 掌握 Appwrite Functions 编写规范(ESM 默认导出、node-appwrite v11、NoSQL 操作)。
- 掌握 Appwrite 自托管部署、tar.gz 打包与排障。
- 交付一个可运行的闪卡式单词打卡应用。
深入阅读与扩展
- SKILL.md —— Appwrite 函数规范、代码模板、全量排障与复用清单
- 扩展方向:为
execute接入正式鉴权、为服务器配置 HTTPS 反代、把db-init改为幂等可重复执行。
8. 参考与维护
官方资料与帮助
维护与版本
| 项目 | 内容 |
|---|---|
| 维护团队 | 鸿蒙实践案例开发团队 |
| 当前案例版本 | v1.0.0 |
| 最后验证日期 | 2026-08-14 |
| 兼容范围 | Appwrite 自托管 v1.9.0 / node-16.0 / node-appwrite v11 |
许可证
本案例采用 MIT License。第三方依赖及素材遵循各自许可证。
Introduction
本项目借助 CodeArts Agent 的需求解析与代码生成能力,以自然语言为唯一输入,自动化完成了一款 HarmonyOS 端云协同单词打卡App的构建,涵盖用户认证、每日打卡、学习进度云端同步等核心功能。
Customize your domain
