从零到一开发「天才厨神」美食烹饪小程序:架构设计与踩坑记录

📅 2026/7/3 2:04:42
从零到一开发「天才厨神」美食烹饪小程序:架构设计与踩坑记录
一、项目背景在学习微信小程序开发的过程中我想做一个实用且有挑战性的项目。考虑到美食烹饪是一个大众需求且涉及数据展示、用户交互、云开发等多个技术点最终决定开发一款美食烹饪小程序——「天才厨神」。二、技术架构2.1 整体架构云开发层 - CloudBase前端层 - 微信小程序业务层 - cloudDB.jsindex数据库操作封装detailcreatefavoritesblindboxprofilemessagessecCheckmarkMessageReadmenusfavoritescommentsmessagesreplies云存储2.2 技术选型层级技术理由前端微信小程序原生开发原生开发能更好地利用微信平台特性调试体验更流畅后端微信云开发CloudBase一站式解决方案无需搭建服务器降低开发成本数据库云数据库NoSQL自动扩展适合小程序数据存储需求复杂逻辑云函数Node.js处理需要管理员权限的操作和调用微信开放接口三、核心功能与关键代码3.1 菜品权限控制由于微信小程序对个人开发者的社交功能有限制我们采用了系统菜品私有菜品的模式// 获取用户可见的菜品asyncgetVisibleMenus(userId){returnawaitthis.db.collection(menus).where(this._.or([{isPublic:true},// 系统菜品所有用户可见{userId:userId}// 私有菜品仅创建者可见])).get();}用户创建的菜品默认设为私有只有管理员通过后台操作才能将其设为系统菜品。3.2 收藏功能用户可以收藏任意菜品方便快速访问asynctoggleFavorite(userId,menuId){constfavoriteawaitthis.db.collection(favorites).where({userId,menuId}).get();if(favorite.data.length0){awaitthis.db.collection(favorites).doc(favorite.data[0]._id).remove();returnfalse;}else{awaitthis.db.collection(favorites).add({data:{userId,menuId,createdAt:newDate()}});returntrue;}}3.3 盲盒随机抽取让用户随机发现新菜品增加趣味性asyncdrawBlindBox(){letmenus[...this.data.menus];if(this.data.favoritesOnly){menusmenus.filter(mthis.data.favoritedMap[m.id]);}elseif(this.data.myMenusOnly){menusmenus.filter(mm.userIdthis.data.userInfo.id);}constrandomMenumenus[Math.floor(Math.random()*menus.length)];this.setData({randomMenu,showResult:true});}3.4 内容安全检测调用微信安全 API 检测用户提交的内容// 云函数exports.mainasync(event){const{type,content}event;if(typetext){constresultawaitcloud.openapi.security.msgSecCheck({content});returnresult;}};四、开发过程中的坑重点4.1 云函数依赖配置缺失问题创建的云函数在调用时总是报错检查日志发现是缺少wx-server-sdk依赖。原因新建云函数时package.json没有自动包含必要的依赖。解决方案手动添加依赖配置{name:markMessageRead,dependencies:{wx-server-sdk:~2.6.3}}4.2 小程序端数据权限不足问题用户点击消息后已读状态无法更新到数据库报错权限不足。原因消息是由系统创建的其他用户评论时当前用户没有权限直接更新其他用户创建的记录。解决方案使用云函数处理需要管理员权限的操作// 云函数标记消息已读exports.mainasync(event){awaitdb.collection(messages).doc(event.messageId).update({data:{isRead:true}});return{success:true};};4.3 消息已读状态同步问题问题用户点击消息后小红点会短暂消失但返回消息中心后又出现。原因前端在调用云函数的同时就更新了本地状态但云函数执行失败因依赖缺失导致数据库中的状态没有改变。返回页面重新加载时从数据库读取的仍是未读状态。解决方案修复云函数依赖问题在云函数返回成功后再更新本地状态4.4 审核被拒个人开发者不能做社交功能问题第一次提交审核被拒原因是个人开发者不能做用户生成内容UGC的社交功能。原因原来的设计允许用户创建公共菜品并点赞这被判定为社交功能。解决方案移除用户创建公共菜品的选项默认创建私有菜品移除点赞功能公共菜品改名为系统菜品由管理员统一管理五、成品展示经过一系列开发和调试「天才厨神」小程序已经完成开发并通过审核。主要功能包括菜品浏览与搜索菜品创建私有菜品收藏盲盒随机抽取评论与回复消息通知意见反馈带内容安全检测如果你对这个项目感兴趣可以扫码体验六、总结通过这个项目我对微信小程序开发和云开发有了更深入的理解。最大的收获是学会了如何处理云函数依赖、数据权限等实际开发中常见的问题以及如何根据平台规则调整产品设计。如果你也在学习小程序开发希望这些经验能对你有所帮助。如果你有任何问题或建议欢迎交流