164
社区成员
发帖
与我相关
我的任务
分享| Course of the Assignment | EE308FZ Software Engineering |
|---|---|
| Assignment Requirements | Assignment 6 - Beta Sprint 2(Backend Group) |
| Objectives of This Assignment | 完成技术框架迁移(从Sprint 1本地Navicat+MySQL改为Vue2+Uniapp+Unicloud云开发),同时实现系统代码质量优化 |
| Other References | 《阿里巴巴Java开发手册(终极版)v1.3.0》、《小程序设计指南·微信开放平台》、《Uniapp官方开发文档》、《UniCloud云开发指南》、《Vue2实战教程》 |
| Project/Group Name | Group 2 —— PoopCare |
| Backend Group Members | 李炳言、王洛森、苏子妍 |
| 成员 | 已完成任务 | 已用时间 | 剩余时间 | 遇到的问题 | 下一步计划 |
|---|---|---|---|---|---|
| 李炳言 | 主导框架迁移:将Sprint 1本地MySQL数据迁移至UniCloud云数据库;基于Vue2+Uniapp+Unicloud重构认证体系,用JWT替换原简单token;开发Unicloud云函数公共权限中间件,替代Sprint 1的MySQL权限逻辑 | 8h | 0h | 迁移后Unicloud云数据库查询语法与MySQL差异较大,需重新适配;原MySQL数据格式与Unicloud云数据库字段类型不兼容 | 配合前端完成Uniapp与云函数的联调;整理框架迁移文档,明确Unicloud开发规范 |
| 王洛森 | 基于Vue2+Uniapp+Unicloud重构数据层:将Sprint 1的MySQL数据模型转为Unicloud云数据库集合结构;开发排便记录高级查询云函数;完善Unicloud云数据库的数据验证规则 | 8h | 0h | Unicloud云数据库的聚合查询语法与MySQL不同,分页逻辑需重新实现;云数据库字段索引配置与MySQL差异导致筛选性能不足 | 测试多场景下云数据库查询稳定性;同步Unicloud数据模型文档至前端 |
| 苏子妍 | 基于Unicloud重构RESTful API风格云函数:扩展反馈模块云函数;实现反馈列表分页查询云函数;适配Uniapp前端参数传递格式,修复路由参数兼容问题 | 7h | 0h | Unicloud云函数的请求参数解析与Sprint 1的MySQL接口不同;管理员云函数权限隔离需依赖Unicloud的用户身份校验,与原MySQL权限逻辑差异大 | 完善云函数参数容错处理;集成Unicloud云函数日志功能,便于问题定位 |
我们上传相关修改代码在github的合作库上

链接:https://github.com/Jupiter-rids/PoopCare-backend
完成从Sprint 1本地Navicat+MySQL到Vue2+Uniapp+Unicloud云开发的全量迁移,同时强化认证安全性与权限管理规范性。
主要组成:
框架迁移核心:将Sprint 1的MySQL数据表(用户表、记录表、反馈表)迁移至Unicloud云数据库集合,适配云数据库字段类型(如MySQL的int转为云数据库number、varchar转为string)
JWT认证重构:基于Unicloud云函数实现JWT生成、验证、解析流程,替换Sprint 1的简单token,支持过期时间与签名验证
权限中间件:开发Unicloud云函数公共权限中间件,统一所有业务云函数的权限校验逻辑,替代Sprint 1中分散的MySQL权限代码
技术特点:
依托Unicloud云开发特性,无需本地数据库部署,支持跨端访问(适配Uniapp多端发布)
JWT与Unicloud用户身份校验结合,双重保障接口安全
云函数模块化设计,符合Vue2+Uniapp开发规范,便于前后端协同
示例代码:
// 微信登录云函数入口(部分代码)
exports.main = async (event, context) => {
try {
// 1. 调用微信 auth.code2Session 接口
const wxUrl = `https://api.weixin.qq.com/sns/jscode2session?appid=${WEAPP_CONFIG.APP_ID}&secret=${WEAPP_CONFIG.APP_SECRET}&js_code=${code}&grant_type=authorization_code`;
// 2. 获取openid和session_key
const { openid, session_key, unionid } = wxResponse.data;
// 3. 数据库操作:查询/创建用户
const userQuery = await usersCollection.where({openid: openid}).get();
// 4. 生成简单token
const token = generateSimpleToken(openid, userData._id);
return {
code: 0,
msg: isNewUser ? '新用户注册成功' : '登录成功',
token: token,
data: responseData
};
} catch (error) {
// 错误处理
}
};
// 简单token生成函数
function generateSimpleToken(openid, userId) {
const timestamp = Date.now();
const randomStr = Math.random().toString(36).substring(2, 15);
const str = `${openid}_${userId}_${timestamp}_${randomStr}`;
return Buffer.from(str).toString('base64').replace(/[+=/]/g, '');
}
基于Vue2+Uniapp+Unicloud重构排便记录模块,扩展高级查询功能,适配云数据库特性。
主要组成:
数据模型迁移:将Sprint 1的MySQL健康记录数据表转为Unicloud云数据库records集合,优化字段结构(如将分散的症状字段整合为数组类型)
高级查询功能:开发Unicloud云函数实现分页(pageNum/pageSize)、日期范围筛选(startTime/endTime)、类型筛选(typeIndex),适配云数据库聚合查询语法
数据验证强化:基于Unicloud云数据库的规则引擎,添加必填字段校验、格式校验,覆盖Sprint 1未考虑的边缘场景
技术特点:
云数据库查询支持实时同步,适配Uniapp前端数据渲染需求
分页逻辑基于Unicloudskip()+limit()实现,结合count()方法完成总数统计,性能优于本地MySQL分页
数据验证规则与Unicloud云数据库规则引擎结合,双重保障数据有效性
示例代码:
// 记录保存核心代码
const recordData = {
openid: openid, // 关键:关联用户
appid: appid,
time: event.time,
typeIndex: event.typeIndex,
typeText: event.typeText || '',
duration: event.duration,
moodIndex: event.moodIndex,
moodText: event.moodText || '',
symptoms: event.symptoms || [],
otherSymptom: event.otherSymptom || '',
note: event.note || '',
habits: event.habits || [],
createTime: Date.now(),
updateTime: Date.now()
};
// 保存到数据库
const addResult = await recordsCollection.add(recordData);
// 记录查询核心代码
const queryResult = await recordsCollection
.where({
openid: openid // 关键:只查询当前用户的记录
})
.orderBy('createTime', 'desc')
.get();
基于Vue2+Uniapp+Unicloud重构反馈模块,完善全流程管理,适配云开发特性。
主要组成:
数据结构扩展:在Sprint 1反馈数据基础上,新增status(待处理/处理中/已完成)、adminReply(管理员回复)、handleTime(处理时间)字段,同步更新Unicloud云数据库feedback集合结构
分页查询重构:基于Unicloud云函数实现反馈列表分页,替代Sprint 1的MySQL分页逻辑,解决原数据量限制问题
管理员云函数:开发updateFeedbackStatus、replyFeedback专属云函数,依托Unicloud的身份校验实现权限隔离,替代原MySQL的管理员权限逻辑
数据一致性:通过Unicloud云数据库的事务操作,确保反馈状态与回复的原子性更新,避免并发问题
技术特点:
云函数与Uniapp前端天然兼容,参数传递无需额外适配
管理员权限依赖Unicloud的用户角色标识,比Sprint 1的MySQL权限控制更安全
云数据库自动同步,管理员操作实时反馈至前端,提升交互体验
示例代码:
// 反馈添加核心代码
await db.collection('feedback').add({
content,
contact: contact || '',
openid: OPENID, // 关键:关联用户
createTime: Date.now()
});
// 反馈查询核心代码
const res = await db.collection('feedback')
.where({
openid: OPENID // 用户隔离核心
})
.orderBy('createTime', 'desc')
.limit(50) // 限制数量
.get();
基于新框架规范,优化代码结构,提升云函数可维护性与兼容性。
主要组成:
统一工具封装:封装Unicloud云函数专用的错误处理、参数验证工具,替代Sprint 1的MySQL相关工具函数
云函数重构:去除Sprint 1的MySQL连接、查询冗余代码,按Vue2+Unicloud规范拆分公共模块(中间件、工具函数)
文档完善:更新Unicloud云函数文档,明确云数据库集合结构、字段类型、接口参数格式,保持与前端文档一致
技术特点:
工具函数适配Unicloud云函数上下文,可直接复用
代码结构符合Vue2组件化思想,云函数按功能模块拆分,便于维护
适配Uniapp前端开发流程,降低前后端联调成本

后端组3名成员围绕框架迁移与功能开发展开协作,同步Vue2+Uniapp+Unicloud的适配进度,解决云数据库与云函数的技术难题
| 项目模块 | 预计工作量 |
|---|---|
| 框架迁移(Vue2+Uniapp+Unicloud) | 10小时 |
| 认证与权限优化 | 6小时 |
| 排便记录高级功能开发 | 6小时 |
| 反馈系统扩展 | 5小时 |
| 测试与联调 | 4小时 |
| 总计 | ≈31小时 |
后端Sprint 2已完成内容:
✅ 框架全量迁移:成功将Sprint 1本地Navicat+MySQL迁移至Vue2+Uniapp+Unicloud,完成数据迁移与语法适配
✅ 认证体系升级:在Unicloud云函数中实现JWT认证,开发公共权限中间件,安全性能优于Sprint 1
✅ 排便记录功能增强:基于Unicloud云数据库实现分页、多条件筛选、数据验证,性能与兼容性达标
✅ 反馈系统扩展:完成Unicloud云数据库feedback集合字段扩展,开发管理员云函数,形成处理闭环
✅ 兼容性验证:确保新框架下接口响应格式与Sprint 1一致,Uniapp前端无需大规模修改
• 已完成工作量:约23h(不含测试联调)
• 已完成任务数:5
• 框架迁移效果:实现"云原生部署",无需本地数据库维护,支持跨端访问
• 后端模块剩余工作量:≈28小时(统计分析云函数开发2天、管理员后台云函数完善1天、系统全面测试1天)
• 项目整体剩余工作量:≈57小时
• 后续衔接重点:基于Vue2+Uniapp+Unicloud框架,开发统计分析云函数(复用现有云数据库集合)、完善管理员后台交互逻辑
| 时间 | 剩余任务数 | 已完成任务数 | 备注 |
|---|---|---|---|
| 0 | 5 | 0 | 明确框架迁移范围,基于Sprint 1业务逻辑制定Unicloud适配方案 |
| 8 | 3 | 2 | 完成框架迁移、认证体系优化,启动排便记录与反馈系统开发 |
| 16 | 0 | 5 | 完成所有核心任务,通过Uniapp+Unicloud联调与兼容性测试 |

✅ 规划Vue2+Uniapp+Unicloud框架迁移方案,迁移Sprint 1 MySQL数据至Unicloud云数据库(2.5小时)
✅ 基于Unicloud云函数实现JWT认证逻辑,替换原简单token(2小时)
✅ 开发Unicloud公共权限中间件,重构7个业务云函数的权限校验(2小时)
✅ 封装Unicloud云函数全局错误处理工具,适配云函数上下文(1小时)
✅ 调试JWT与云数据库的兼容性问题(0.5小时)
✅ 重构Sprint 1的MySQL数据模型,设计Unicloud云数据库集合结构(2小时)
✅ 开发排便记录分页、多条件筛选云函数,适配Unicloud查询语法(2.5小时)
✅ 迁移并优化健康评分算法,提升云函数执行效率(1.5小时)
✅ 配置Unicloud云数据库索引,优化多条件查询性能(1小时)
✅ 完善云数据库数据验证规则,覆盖边缘场景(1小时)
✅ 扩展Unicloudfeedback集合字段,适配反馈处理全流程(1.5小时)
✅ 开发反馈列表分页查询云函数,兼容Uniapp前端参数格式(2小时)
✅ 实现管理员反馈处理云函数,基于Unicloud身份校验实现权限隔离(2小时)
✅ 修复云函数参数解析问题,添加容错处理(1小时)
✅ 编写Unicloud云函数接口文档,配合前端联调(0.5小时)
在Beta Sprint 2中,从本地Navicat+MySQL全面迁移至Vue2+Uniapp+Unicloud云开发架构,同时基于新框架完成了认证安全强化、排便记录高级功能、反馈系统扩展等核心任务。本次冲刺延续"模块负责+交叉验证"模式:李炳言主导框架迁移与认证体系重构,解决了云数据库适配与JWT集成问题;王洛森聚焦数据层迁移与业务功能扩展,确保核心逻辑在云函数中高效运行;苏子妍负责接口层重构与管理员功能开发,保障前后端交互顺畅。
通过本次冲刺,我们深刻体会到"框架迁移"与"功能兼容"的平衡艺术:Unicloud云数据库的查询语法、云函数上下文、权限控制与MySQL差异显著,初期面临数据迁移不兼容、查询性能下降等问题,但新框架的云原生特性(无需本地部署、跨端兼容)为后续迭代奠定了良好基础。同时,基于Vue2+Uniapp的技术栈统一,显著降低了前后端联调成本,解决了Sprint 1中跨框架适配的痛点。
后续工作中,团队将继续深耕Unicloud生态,充分利用云服务的优势,快速推进统计分析功能与管理员后台开发,同时持续优化系统性能与安全性,确保最终产品既能满足用户核心需求,又具备良好的扩展性与用户体验。
| 成员 | 主要任务 | 贡献比例 | 衔接Sprint 1的工作 |
|---|---|---|---|
| 李炳言 | 框架迁移、JWT认证重构、权限中间件开发、错误处理封装 | 34% | 延续安全防护需求,适配新框架实现认证升级 |
| 王洛森 | 数据模型迁移、排便记录高级查询、云数据库优化、算法迁移 | 33% | 基于业务逻辑与数据模型,在Unicloud中扩展功能 |
| 苏子妍 | 反馈系统扩展、管理员云函数开发、参数适配、文档编写 | 33% | 延续反馈功能基础,重构并扩展接口能力 |
作为框架迁移的主导者,我深刻认识到"技术选型适配业务需求"的重要性。本次从MySQL到Unicloud的迁移,初期因忽视云数据库与关系型数据库的语法差异,导致查询逻辑重构成本增加,暴露了我对云开发技术栈的准备不足。后续开发中,将提前深入研究新框架的核心特性,建立"技术预研+小范围验证"的流程,避免大规模迁移时出现兼容性问题;同时,Unicloud的云原生特性让我意识到,后端开发应更关注"业务逻辑"而非"环境部署",未来将聚焦核心功能迭代,充分利用云服务的优势。
在数据层迁移与功能扩展中,我体会到"数据结构设计"对云函数性能的关键影响。Sprint 1的MySQL数据模型直接迁移至Unicloud后,出现了查询效率低的问题,后来通过添加组合索引、优化字段结构(如将冗余字段合并为对象),才显著提升性能。这让我明白,云数据库的设计不能照搬关系型数据库的思维,需要充分利用其灵活的字段结构与索引特性。同时,云函数的无状态特性要求业务逻辑更简洁,我将健康评分算法中的循环逻辑优化为数组方法(map、reduce),不仅提升了执行效率,还让代码更简洁易读。未来开发中,我将更注重“数据结构设计”与“代码效率”的平衡,针对不同数据库类型制定差异化的设计方案。
在接口层重构中,我深刻理解了"前后端技术栈统一"的深层价值。Vue2+Uniapp+Unicloud的技术栈让参数传递、格式适配更顺畅,比如Uniapp前端的uniCloud.callFunction可直接传递复杂参数,无需像Sprint 1那样进行JSON序列化/反序列化。但初期因未掌握Unicloud云函数的参数解析规则,导致数组类型参数接收异常,后来通过查看官方文档发现,云函数可直接接收event中的数组、对象参数,无需额外处理。这让我意识到,技术栈统一虽能降低协作成本,但仍需深入理解各环节的底层逻辑。此外,集成Unicloud日志功能后,问题定位效率提升了60%,未来将更注重“可观测性”开发,在接口中添加关键日志,便于快速排查问题。