乐于分享
好东西不私藏

我用 AI 写了一个体重记录 App —— Electron 桌面版 + 微信小程序,数据全跑在云上

我用 AI 写了一个体重记录 App —— Electron 桌面版 + 微信小程序,数据全跑在云上

我用 AI 写了一个体重记录 App —— Electron 桌面版 + 微信小程序,数据全跑在云上

没写一行后端代码,没配一台服务器,全程跟 AI 对话就把活干了。


先看成品

四张截图,一目了然:

Bmob 云数据库后台

数据库里就一张表,5 条记录,全是 AI 帮我自动建的。

桌面版 + 小程序开发工具同屏

左边是深色军工风的桌面 App,右边是浅色卡片风的小程序,但背后连的是同一张云表

桌面版全屏

小程序全屏


我做了什么?我几乎什么都没做

整个过程就是对话:

  • • "帮我写一个体重记录的 Electron 桌面应用,数据存 Bmob 云数据库"
  • • "再加个体重曲线图"
  • • "再做一版微信小程序,用同一个 Bmob 表"
  • • "给我写篇文章总结整个开发过程"

AI 完成了:

任务
AI 干了什么
数据库建表
查 Bmob API 文档,建 WeightRecord 表,字段 weight/note/date
桌面版开发
写完整 HTML/CSS/JS,军工风 UI,Canvas 折线图,Bmob 数据层
小程序开发
WXML/WXSS/JS 全栈,wx.request 适配,Canvas 2D 图表
环境搭建
国内镜像 npm 配置,electron-builder 二进制缓存
打包安装包
NSIS 安装包,77MB 的 exe 一条命令搞定
踩坑
Bmob 域名从 api2.bmob.cn 变为 api.codenow.cn,REST API Key 写不了数据必须用 Master Key —— 都是 AI 自己排查出来的

我一个程序员都没雇,一个 StackOverflow 都没搜。


技术栈

层级
选择
为什么
桌面端
Electron 28 + 原生 HTML/CSS/JS
不用框架,越轻越好
移动端
微信小程序原生
扫码就用,不装 App
数据层
Bmob 后端云 REST API
零后端代码,HTTP 直接读写
网络
全程国内镜像
GitHub 下不动是常态

三者打通的效果:电脑上录入 → 手机上看曲线,手机上记 → 电脑上出统计,数据和图表实时同步。


云数据库:Bmob 后端云

选 Bmob 的理由很简单:它是国内能用的、不需要信用卡的、有免费额度的后端云服务。

域名陷阱(AI 帮我踩出来的)

按照网上能找到的教程,Bmob REST API 域名是 api2.bmob.cn。AI 一试,死活连不上。自己排查才发现:这些老域名全部失效了,新的统一入口是:

https://api.codenow.cn

这个变化在官方文档里藏得很深。

鉴权方式的坑

Bmob 有三种 Key,AI 先用 REST API Key 尝试写数据,一直报 401 unauthorized。换 Master Key 就通了。个人工具直接用 Master Key,最简单。

数据封装代码

AI 生成的 bmob.js 不到 50 行,增删查全齐:

const Bmob = {  appId: '675124e20063916575ac2d11b78c5e79',  masterKey: '4143d064e66ba8afda511e5e6e092682',  baseUrl: 'https://api.codenow.cn',  headers() {    return {      'X-Bmob-Application-Id': this.appId,      'X-Bmob-Master-Key': this.masterKey,      'Content-Type': 'application/json'    }  },  async request(method, path, body) {    const res = await fetch(this.baseUrl + path, { method, headers: this.headers(), body })    const data = await res.json()    if (!res.ok) throw new Error(data.error || res.statusText)    return data  },  async list() {    const data = await this.request('GET', '/1/classes/WeightRecord?order=createdAt&limit=500')    return data.results  },  async add(weight, note) {    return this.request('POST', '/1/classes/WeightRecord', { weight, note })  },  async remove(objectId) {    return this.request('DELETE', `/1/classes/WeightRecord/${objectId}`)  }}

没有 ORM,没有依赖,就是 4 个 HTTP 动词。AI 的思路很清晰:够用就好,别引入多余的复杂度。


Electron 桌面版:从零到安装包

网络障碍:国内开发 Electron 的三座大山

AI 在装 Electron 的时候就踩坑了。总结下来三条:

  1. npm 版本问题
    :系统自带的 npm 有 bug,必须切换到独立安装的 Node
  2. NODE_ENV 环境变量
    :系统级设了 production → npm install 静默跳过 devDependencies → electron 跟 electron-builder 全装不上
  3. GitHub 下载超时
    :electron 二进制包托管在 GitHub,国内几乎必败 → 必须配 npmmirror 镜像

AI 自动生成了 .npmrc

registry=https://registry.npmmirror.comelectron_mirror=https://npmmirror.com/mirrors/electron/electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/

以及一键安装脚本(已发布为开源 skill:electron-cn-dev)。

Canvas 曲线图

让 AI 在深色军工风面板上画体重变化折线图:

  • • Y 轴自动适配数据范围
  • • 荧光青 #06b6d4 折线 + 发光晕影
  • • 半透明网格 + 坐标轴
  • • 数据锚点圆圈

整个 Canvas 绘图代码是 AI 一行行写的,包含 DPI 适配和窗口缩放重绘。

打包成安装包

AI 说跑这一条命令:

npx electron-builder --win --x64

出来一个 77MB 的 体重记录 Setup 1.0.0.exe,安装到系统程序目录,桌面快捷方式自动生成。


微信小程序版:同一份数据,另一个入口

同一个 Bmob 数据库,AI 又基于微信小程序框架重新实现了一遍。

wx.request 适配

小程序没有 fetch,AI 用 wx.request 封装了完全等价的调用:

bmobRequest(method, url, data = null) {  return new Promise((resolve, reject) => {    wx.request({      url,      method,      header: {        'X-Bmob-Application-Id': this.globalData.bmobAppId,        'X-Bmob-Master-Key': this.globalData.bmobMasterKey      },      data,      success:res => res.statusCode < 300 ? resolve(res.data) : reject(res),      fail: reject    })  })}

回调用 Promise 包一层,页面层就能用 async/await,和桌面版一样的写法。

Canvas 2D 适配

小程序的 Canvas API 是新版 type="2d" 的写法,获取节点的方式和网页不同,但折线图的绘制逻辑完全复刻了桌面版。

页面结构

┌─────────────────────────┐│   📊 最新体重:145kg     │  ← 蓝色渐变卡片├─────────────────────────┤│   📈 体重变化趋势        │  ← Canvas 2D 折线图├─────────────────────────┤│   [输入体重______] [记录] │  ← 录入区├─────────────────────────┤│   历史记录(5)    清空   ││   145kg  08-02    删除   ││   156kg  08-02    删除   ││   ...                   │└─────────────────────────┘

AI 连微信开发者工具的 urlCheck: false 都帮忙配好了——开发阶段不检查域名白名单。


两版对比

维度
桌面版
小程序版
技术
Electron + HTML/CSS/JS
WXML/WXSS/JS
网络请求
fetchwx.request
UI 风格
深色军工
浅色卡片
数据层
Bmob REST API
Bmob REST API(同一套)
图表
Canvas 2D
Canvas 2D
打包
electron-builder → exe
微信开发者工具 → 上传
适用
电脑上深度使用
手机上随手看

核心代码高度一致——数据封装几乎一模一样,图表逻辑直接移植,只是框架的"壳"不同。


AI 帮我踩过的坑

  1. Bmob 域名失效
    api2.bmob.cn → api.codenow.cn,AI 自己排查出来的
  2. REST API Key 不能写数据
    :401,必须换 Master Key
  3. npm 三重地狱
    :自带的 npm 有 bug + NODE_ENV=production + GitHub 下不动
  4. PowerShell 编码
    :UTF-8 vs UTF-8 BOM,脚本换地方就跑炸
  5. Bmob 没有批量删除
    :得先查列表再并发删
  6. 小程序 Canvas 2D
    :API 和网页不一样

这些坑如果让我自己去排查,每一条都能耗掉半天。AI 一边开发一边踩,踩完接着干。


我的感受

整个过程,我是一个提需求的人,AI 是干活的人

我只要说"我要什么",它就去查文档、写代码、跑测试、打包、报错了自己排查、修完继续。我连 npm install 都没亲手敲过一行。

三个项目、两套前端、一个云数据库,从想法到成品,全程对话完成。

如果你也想试试用 AI 开发自己的小工具:

  1. 说清楚你要什么——"记录体重,能看曲线,多端同步"
  2. 让 AI 推荐技术栈——它会告诉你 Electron 还是小程序、Bmob 还是 Supabase
  3. 把 API Key 给它——它可以自己连数据库建表测接口
  4. 一直对话——它写代码,你验收,有问题反馈,它自己修

源码都在本地workspace/weight-record-electron/(桌面版)、workspace/weight-record-miniapp/(小程序版)。国内网络安装工具已开源:electron-cn-dev。