AW
AW
← BACK

这顿吃什么

微信小程序 + Node 后端:录入冰箱食材让 AI 出菜谱,配份量换算、替代食材与做菜复盘

WeChat MiniProgramNode.jsExpressDeepSeek
ROLE · 全栈独立开发PERIOD · 2026-08 · 前端 30 个 js / 4,961 行,后端约 1,200 行

FEATURES

🧊

冰箱食材录入

食材库 + 自定义添加,数据存在小程序本地,不需要注册登录

🍳

AI 出菜谱

按冰箱现有食材与口味偏好推荐菜品,输出做法、所需厨具与还缺什么

⚖️

份量换算

按人数重算配料用量,而不是给一份固定菜谱

🔄

替代食材建议

缺某样材料时给出可替代方案,配合厨具白名单(24 项)过滤掉做不了的菜

📝

创意菜与复盘

支持自创菜谱生成,以及做完之后记录复盘(哪一步翻车、下次怎么改)

🔌

16 个后端接口

推荐、创意菜、菜谱知识、做菜助手、菜品库、份量、替代、复盘、参考、反馈

TECH

  • ▸微信小程序原生 11 个页面(首页 / 厨房 / 推荐 / 菜谱详情 / 加食材 / 烹饪 / 菜品库 / 我的等)
  • ▸Node + Express 后端约 1,200 行,DeepSeek 调用带 2 次重试 + JSON 提取与 sanitize
  • ▸下厨房抓取:搜索页短 UA、详情页移动端 UA,全局互斥串行,结果进内存缓存(TTL 7 天)
  • ▸取数优先级:本地菜谱库 → 内存缓存 → 抓取 → AI 兜底

项目概览

解决「今天吃什么」里的做饭那一半:把冰箱里现有的食材录进去,让 AI 给出能做的菜、缺什么、怎么做。

围绕这个主流程还长出了几件实用的小功能:份量换算(按人数重算配料而不是固定份量)、替代食材(缺料时给替代方案)、创意菜(自己想个组合让它出菜谱)、以及做菜复盘(做完记录哪一步翻车、下次怎么改)。

取数设计

菜谱数据来自下厨房,属于第三方页面,所以做了一条带缓存的取数链:

本地菜谱库 → 内存缓存 → 实时抓取 → AI 兜底

抓取时按页面类型切换 User-Agent(搜索页用短 UA、详情页用移动端 UA),并用一个全局互斥锁保证同一时刻只有一个抓取在跑,抓取结果进内存 Map 缓存(TTL 7 天)。AI 输出则会经过 JSON 提取与清洗,厨具不在白名单(24 项)里的菜会被过滤掉——避免推荐出用户根本做不了的菜。

真实的边界

这个项目的功能比我原先写的要少,需要如实说明:

  • 「附近美食」并不存在:README 把它列为两大模式之一,但当前小程序代码里没有任何 wx.cloud、callFunction 或 getLocation 调用;cloudfunctions/nearby(高德 POI 周边搜索)是从未被调用的遗留代码。目前只有「自己做饭」这一条线。
  • 本地菜谱库实际不可用:后端启动时读取 recipes.json,但这个文件在仓库和本机都不存在,所以取数链的第一级是空的。
  • 服务器上抓不到下厨房:运行日志里有 getaddrinfo ENOTFOUND www.xiachufang.com,抓取分支在线上环境不通。
  • 抓取结果存在对不上的情况:实测用不相关的菜名请求,返回的是完全无关的果蔬汁菜谱,且标注来源为「下厨房」——没有触发降级。
  • 未正式发布:小程序配置里的 appid 是测试号。

后端本身是上线运行的(https://api.weihong.xyz,PM2 + nginx),前端 apiBase 也指向生产域名,健康检查返回 {"ok":true}。开发在 2026-08-26 后暂停。

SCREENSHOTS

实机演示

小程序实际操作流程:录入冰箱食材、选择口味偏好、AI 生成菜谱与做法。