- 新增 server/:Node + Express + SQLite + node-cron 实现登录、纪念日 CRUD 和定时订阅消息推送 - 新增 .gitea/workflows/deploy.yml:推送即触发群晖 Docker 部署,监听 15002 - utils/api.js:自动按 envVersion 切换本地/线上 BASE_URL - app.js 与 add-anniversary.js 移除 wx.cloud 调用,改走自建后端 - cloudfunctions/ 暂保留以便回滚 - 一并提交此前未入库的首页 / 设置页 / 日历 / 万年历等改造 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+349
@@ -0,0 +1,349 @@
|
||||
# 生日提醒小程序 - 云开发部署指南
|
||||
|
||||
## 📋 部署步骤概览
|
||||
|
||||
```
|
||||
上传云函数 → 创建数据库集合 → 配置定时触发器 → 测试功能
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 第一步:上传云函数
|
||||
|
||||
### 1.1 打开云开发控制台
|
||||
|
||||
1. 在微信开发者工具中,点击顶部菜单 **"云开发"**
|
||||
2. 进入云开发控制台
|
||||
3. 确认环境ID为:`cloudbase-1gk3x0ia3a6b1f80`
|
||||
|
||||
### 1.2 上传云函数
|
||||
|
||||
需要上传3个云函数:
|
||||
|
||||
#### 1. 上传 login 云函数
|
||||
|
||||
```bash
|
||||
右键点击 cloudfunctions/login
|
||||
→ 选择 "上传并部署:云端安装依赖"
|
||||
→ 等待上传完成(约30秒)
|
||||
```
|
||||
|
||||
#### 2. 上传 syncAnniversary 云函数
|
||||
|
||||
```bash
|
||||
右键点击 cloudfunctions/syncAnniversary
|
||||
→ 选择 "上传并部署:云端安装依赖"
|
||||
→ 等待上传完成(约30秒)
|
||||
```
|
||||
|
||||
#### 3. 上传 sendReminder 云函数
|
||||
|
||||
```bash
|
||||
右键点击 cloudfunctions/sendReminder
|
||||
→ 选择 "上传并部署:云端安装依赖"
|
||||
→ 等待上传完成(约30秒)
|
||||
```
|
||||
|
||||
### 1.3 验证上传结果
|
||||
|
||||
在云开发控制台 → 云函数,应该看到3个云函数:
|
||||
- ✅ login
|
||||
- ✅ syncAnniversary
|
||||
- ✅ sendReminder
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ 第二步:创建数据库集合
|
||||
|
||||
### 2.1 进入数据库管理
|
||||
|
||||
云开发控制台 → 数据库
|
||||
|
||||
### 2.2 创建集合
|
||||
|
||||
需要创建2个集合:
|
||||
|
||||
#### 1. anniversaries(纪念日数据)
|
||||
|
||||
```
|
||||
点击 "添加集合"
|
||||
集合名称:anniversaries
|
||||
权限设置:仅创建者可读写
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
```javascript
|
||||
{
|
||||
_id: String, // 自动生成
|
||||
_openid: String, // 自动生成(用户openid)
|
||||
personId: String, // 人员ID
|
||||
personName: String, // 人员姓名
|
||||
type: String, // 类型:birthday/lunar_birthday/wedding等
|
||||
customTypeName: String,// 自定义类型名称
|
||||
isLunar: Boolean, // 是否农历
|
||||
solarYear: Number, // 公历年份
|
||||
solarMonth: Number, // 公历月份
|
||||
solarDay: Number, // 公历日期
|
||||
importance: String, // 重要程度
|
||||
remindEnabled: Boolean,// 是否开启提醒
|
||||
remindDays: Number, // 提前提醒天数
|
||||
remark: String, // 备注
|
||||
createTime: Date, // 创建时间
|
||||
updateTime: Date // 更新时间
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. remind_logs(提醒日志)
|
||||
|
||||
```
|
||||
点击 "添加集合"
|
||||
集合名称:remind_logs
|
||||
权限设置:仅创建者可读写
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
```javascript
|
||||
{
|
||||
_id: String, // 自动生成
|
||||
anniversaryId: String, // 纪念日ID
|
||||
personName: String, // 人员姓名
|
||||
typeName: String, // 类型名称
|
||||
daysUntil: Number, // 剩余天数
|
||||
sendDate: Date, // 发送日期
|
||||
status: String, // 状态:success/failed
|
||||
error: String // 错误信息(如果失败)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⏰ 第三步:配置定时触发器
|
||||
|
||||
### 3.1 进入触发器管理
|
||||
|
||||
云开发控制台 → 云函数 → sendReminder → 触发器
|
||||
|
||||
### 3.2 创建触发器
|
||||
|
||||
**方法1:自动配置(推荐)**
|
||||
|
||||
触发器已在 `config.json` 中配置,上传云函数时会自动创建:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "dailyReminder",
|
||||
"type": "timer",
|
||||
"config": "0 0 9 * * * *"
|
||||
}
|
||||
```
|
||||
|
||||
**方法2:手动创建**
|
||||
|
||||
如果没有自动创建,手动添加:
|
||||
|
||||
```
|
||||
点击 "新建触发器"
|
||||
触发器名称:dailyReminder
|
||||
触发周期:自定义
|
||||
Cron表达式:0 0 9 * * * *
|
||||
|
||||
说明:每天上午9点执行
|
||||
```
|
||||
|
||||
### 3.3 Cron 表达式说明
|
||||
|
||||
格式:`秒 分 时 日 月 星期 年`
|
||||
|
||||
常用配置:
|
||||
```
|
||||
0 0 9 * * * * - 每天上午9:00
|
||||
0 0 8,20 * * * * - 每天上午8:00和晚上8:00
|
||||
0 0 9 * * 1-5 * - 工作日上午9:00
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 第四步:测试功能
|
||||
|
||||
### 4.1 测试订阅消息授权
|
||||
|
||||
1. 在小程序中添加一个纪念日
|
||||
2. 开启"是否提醒"开关
|
||||
3. 点击保存
|
||||
4. 应该弹出订阅消息授权弹窗
|
||||
5. 点击"允许"
|
||||
|
||||
### 4.2 测试云函数
|
||||
|
||||
在云开发控制台 → 云函数 → sendReminder:
|
||||
|
||||
```
|
||||
点击 "测试"
|
||||
输入参数:{}
|
||||
点击 "运行测试"
|
||||
```
|
||||
|
||||
查看返回结果:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"total": 1,
|
||||
"successCount": 1,
|
||||
"failCount": 0
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 查看数据库
|
||||
|
||||
在云开发控制台 → 数据库:
|
||||
|
||||
1. **anniversaries 集合**:应该看到刚才添加的纪念日数据
|
||||
2. **remind_logs 集合**:如果触发了提醒,应该有日志记录
|
||||
|
||||
### 4.4 测试订阅消息接收
|
||||
|
||||
**方法1:手动触发(立即测试)**
|
||||
|
||||
在云开发控制台 → 云函数 → sendReminder → 运行测试
|
||||
|
||||
**方法2:等待定时触发**
|
||||
|
||||
等到第二天上午9:00,自动触发提醒
|
||||
|
||||
**方法3:修改定时器(快速测试)**
|
||||
|
||||
临时修改 Cron 表达式为:`0 */1 * * * * *`(每分钟执行一次)
|
||||
测试完成后改回:`0 0 9 * * * *`
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 第五步:项目配置
|
||||
|
||||
### 5.1 修改 project.config.json
|
||||
|
||||
确认云函数根目录配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"cloudfunctionRoot": "cloudfunctions/",
|
||||
"miniprogramRoot": "./",
|
||||
"appid": "你的AppID",
|
||||
"projectname": "生日提醒小程序"
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 确认 app.json
|
||||
|
||||
无需额外配置,订阅消息权限已自动启用。
|
||||
|
||||
---
|
||||
|
||||
## 🎯 功能验证清单
|
||||
|
||||
完成以下验证,确保功能正常:
|
||||
|
||||
- [ ] 云开发初始化成功(控制台无报错)
|
||||
- [ ] 能够获取到用户 openid
|
||||
- [ ] 添加纪念日时弹出订阅授权
|
||||
- [ ] 纪念日数据同步到云端(查看数据库)
|
||||
- [ ] 手动执行 sendReminder 云函数成功
|
||||
- [ ] 定时触发器配置成功
|
||||
- [ ] 能够收到订阅消息推送
|
||||
|
||||
---
|
||||
|
||||
## 🐛 常见问题
|
||||
|
||||
### Q1: 云函数上传失败?
|
||||
|
||||
**A**: 检查网络连接,或手动安装依赖:
|
||||
|
||||
```bash
|
||||
cd cloudfunctions/login
|
||||
npm install
|
||||
```
|
||||
|
||||
然后选择 "上传并部署:不安装依赖"
|
||||
|
||||
### Q2: 获取不到 openid?
|
||||
|
||||
**A**:
|
||||
1. 确认已上传 login 云函数
|
||||
2. 在真机上测试(开发者工具可能有限制)
|
||||
3. 查看控制台日志
|
||||
|
||||
### Q3: 订阅消息没有弹出?
|
||||
|
||||
**A**:
|
||||
1. 确认在真机上测试(开发者工具不支持)
|
||||
2. 检查模板ID是否正确
|
||||
3. 每个用户需要单独授权
|
||||
|
||||
### Q4: 定时触发器不执行?
|
||||
|
||||
**A**:
|
||||
1. 确认 Cron 表达式正确
|
||||
2. 查看云函数日志
|
||||
3. 手动测试云函数是否正常
|
||||
|
||||
### Q5: 收不到订阅消息?
|
||||
|
||||
**A**:
|
||||
1. 确认用户已授权订阅
|
||||
2. 检查数据库中有 openid
|
||||
3. 查看 remind_logs 是否有记录
|
||||
4. 检查云函数权限配置
|
||||
|
||||
---
|
||||
|
||||
## 📊 监控和维护
|
||||
|
||||
### 1. 查看云函数日志
|
||||
|
||||
云开发控制台 → 云函数 → 选择函数 → 日志
|
||||
|
||||
### 2. 查看提醒统计
|
||||
|
||||
查询 remind_logs 集合:
|
||||
|
||||
```javascript
|
||||
// 查看今天的提醒记录
|
||||
db.collection('remind_logs')
|
||||
.where({
|
||||
sendDate: _.gte(new Date(new Date().toDateString()))
|
||||
})
|
||||
.get()
|
||||
```
|
||||
|
||||
### 3. 数据备份
|
||||
|
||||
定期导出数据库数据:
|
||||
|
||||
云开发控制台 → 数据库 → 导出
|
||||
|
||||
---
|
||||
|
||||
## 💰 费用说明
|
||||
|
||||
### 免费额度(每天)
|
||||
|
||||
- 云函数调用:10万次
|
||||
- 数据库读操作:5万次
|
||||
- 数据库写操作:3万次
|
||||
- 云存储容量:5GB
|
||||
|
||||
对于个人使用,完全免费!
|
||||
|
||||
---
|
||||
|
||||
## 🎉 部署完成!
|
||||
|
||||
现在你的生日提醒小程序已经具备了完整的推送提醒功能:
|
||||
|
||||
✅ 用户添加纪念日时自动请求订阅授权
|
||||
✅ 数据自动同步到云端
|
||||
✅ 每天上午9点自动检查并发送提醒
|
||||
✅ 提醒记录自动保存到数据库
|
||||
|
||||
**享受你的智能生日提醒吧!** 🎂
|
||||
|
||||
Reference in New Issue
Block a user