本地启动
本章在自己的电脑上运行 API 和 App,完成一笔测试订单。先使用项目自带的俱乐部资料,不需要服务器或支付账号。
1. 安装工具#
先安装以下工具,安装完成后再打开终端。
| 工具 | 下载地址 | 用途 |
|---|---|---|
| Node.js 24 LTS | Node.js 官网 | 运行 API 和品牌生成脚本 |
| Flutter stable | Flutter 安装指南 | 运行与构建 App |
| Git | Git 下载 | 下载、更新项目代码 |
| Chrome | Chrome 官网 | 先在浏览器运行 App |
macOS 打开「终端」,Windows 打开「PowerShell」。依次执行:
node --version
flutter --version
git --version
flutter doctor
检查结果: Node.js 显示 v24.x;Flutter 与 Git 能输出版本;flutter doctor 能识别 Chrome。此时只需跑通浏览器,Android Studio、Xcode 和真机工具链可以在发布章节再配置。
如果终端提示“找不到命令”,关闭并重新打开终端再试;仍然失败时,回到对应工具的安装指南检查 PATH。
2. 下载并打开项目#
在终端进入你存放项目的目录,执行:
git clone https://github.com/nph-cn/openni-club.git
cd openni-club
npm install
也可以在 GitHub 仓库 点击 Code → Download ZIP,解压后在终端进入 openni-club 文件夹,再执行 npm install。
检查结果: 当前文件夹中能看到 README.md、apps、services 和 package.json。后文的「仓库根目录」都指这里;不要在 ZIP 压缩包内运行命令。
3. 创建本地配置#
在仓库根目录复制环境文件。
macOS / Linux:
cp .env.example .env
Windows PowerShell:
Copy-Item .env.example .env
用编辑器打开 .env。第一次运行保留以下配置:
PORT=8787
HOST=127.0.0.1
API_MODE=demo
DATA_DIR=./data
CORS_ORIGINS=http://localhost:4173,http://localhost:8080
demo 是隔离测试模式,不会创建真实支付。微信和支付字段先留空;需要使用本地运营后台时,再为 ADMIN_TOKEN 填写至少 32 字符的随机值。这个文件只保存在自己电脑上,不提交到 Git。
4. 启动 API#
仍在仓库根目录执行:
node scripts/doctor.mjs
node --env-file=.env services/api/src/server.mjs
保持这个终端窗口打开。在浏览器访问:
http://localhost:8787/health
检查结果: 浏览器返回 JSON 健康状态,终端没有退出。若提示端口被占用,先停止之前启动的 API,再运行一次。
API 数据保存在仓库的 data/ 目录。平时更新代码不要删除这个目录。
5. 打开 App#
打开第二个终端窗口,进入同一个 openni-club 文件夹,再执行:
cd apps/mobile
flutter pub get
flutter run -d chrome --web-port=8080 --dart-define=API_BASE_URL=http://localhost:8787/api/v1
检查结果: Chrome 打开 App,能看到俱乐部、服务与成员。保留两个终端窗口:第一个运行 API,第二个运行 Flutter。关闭任意一个,对应服务都会停止。
这里显式传入 API_BASE_URL,让 App 连接刚刚启动的 API。省略这个参数会读取内置界面数据,不适合验证服务器订单。
6. 提交测试订单#
在 App 中按顺序操作:
- 打开服务列表,选择一项服务和规格。
- 选择成员,填写未来的预约时间与测试联系方式。
- 在确认页核对费用、时长和成员,再提交预约。
- 打开「订单」,查看刚刚提交的记录。
- 取消一笔尚未履约的测试预约。
检查结果: 订单详情显示所选规格、预约时间和状态;返回列表后记录仍可查询。当前环境不发生真实付款,不要输入客户的真实个人信息。
测试完成后,继续 品牌与资料,换成自己的名称和 Logo。
常见问题#
| 现象 | 处理方式 |
|---|---|
找不到 node:sqlite |
检查 node --version,确认实际运行的是 Node.js 24,而不是系统里的另一套旧版本 |
EADDRINUSE |
8787 已被占用。停止自己启动的旧实例;若修改 PORT,也要同步客户端 API 地址 |
| 浏览器提示 CORS 错误 | .env 的 CORS_ORIGINS 加入当前页面完整来源,例如 http://localhost:8080,然后重启 API |
| Android 模拟器连接不上 localhost | 模拟器访问电脑使用 http://10.0.2.2:8787/api/v1;明文 HTTP 仅用于开发调试 |
| 手机连接不上电脑 localhost | 手机的 localhost 指手机自身。使用同一 Wi-Fi 下电脑的局域网 IP 或测试 HTTPS 域名,并配置 API 的监听地址 |
| 小程序模拟器可用,真机失败 | 检查 HTTPS、证书、合法域名和自己的 AppID。开发者工具中的忽略校验不能代替线上配置 |
| 创建订单失败 | 按界面的错误提示检查预约时间、联系方式、成员档期和 API 状态 |
| 清除登录后看不到旧订单 | 新的测试身份可能是另一个用户。先核对当前身份,不要直接删除数据库 |