一个“匿名提问箱 + 匿名广场”的轻量化项目:支持网页端(本仓库 web/)快速本地跑起来,也包含微信小程序端(miniprogram/)+ 云函数(cloudfunctions/api)的实现。
- 打开匿名广场:访问
/square- 直接发布匿名内容(可带最多 3 个标签)
- 给帖子点“共鸣”
- 匿名评价(每条帖子展示最近 3 条评论)
- 创建自己的匿名提问箱:
- 访问
/box/new:生成两条链接- “主页链接”:发给朋友匿名提问
- “后台登入链接”:自己保存,用来查看/回复提问
- 访问
- 提问与回复:
- 朋友通过
/u/:receiverKey匿名提问(问题不会显示提问者身份) - 你在
/me登录后查看“收到的问题”,可回复或“删除”(实际为隐藏) - 回复后可在对外主页展示“已回答的问题”
- 朋友通过
- 把“想说的话”发布到广场:
- 在
/me的“想说的话”里填写内容 - 点击“发布到广场”生成一张“提问卡片”,其他人可一键跳转到你的匿名提问页
- 在
- 广场发帖的昵称是“每日匿名代号”:基于浏览器 Cookie(
anonSeed)+ 当天日期生成,同一天内保持一致,第二天会变化 - 可在广场顶部点击“换一个”刷新
anonSeed,立刻获得新的匿名代号
- “每日匿名代号”设计:在不暴露身份的前提下,保留一定的连续性与社区氛围(同一天同设备同代号,可主动更换)
- 广场双布局:支持“便利贴 / 气泡”两种视觉呈现(Cookie 持久化偏好)
- 两端同一产品形态:网页端可本地直跑;小程序端对接云开发,适合发布与真实用户使用
- 防滥用策略:
- 网页端按 IP 进行限流(发布/共鸣/评论/提问等)
- 小程序端按用户每日配额限制,并接入微信内容安全检测(
msgSecCheck)
环境要求
- Node.js 18+(本项目使用 ESM)
- npm
启动步骤
- 安装依赖:
npm install
- 启动服务:
npm run dev
- 打开浏览器访问:
- 默认端口:
http://localhost:3000/ - 如需自定义端口(PowerShell):
$env:PORT=3017; npm run dev
- 默认端口:
数据存储
- 网页端使用本地 JSON 文件存储:
/.localdata/db.json - 首次启动会自动创建(无需额外数据库)
- 想“重置数据”可删除
/.localdata/db.json后重启
你需要准备
- 微信开发者工具
- 一个可用的小程序 AppID(
project.config.json里appid目前为空) - 开通云开发环境,并具备调用 OpenAPI 的权限(用于生成小程序码与内容安全检测)
启动步骤(概览)
- 用微信开发者工具导入项目根目录(包含
project.config.json) - 在开发者工具中配置云开发环境
- 部署云函数:
- 云函数目录:
cloudfunctions/api - 函数名需为:
api(小程序端固定调用该名字)
- 云函数目录:
- 云数据库集合(云函数会使用这些集合名):
userssquare_postspost_reactionsquestionsreports
- 可选:在云函数环境变量中配置:
ALIAS_HMAC_SECRET:用于生成更稳定的匿名别名(不配默认值为dev)
web/:网页端(Express + 本地 JSON 存储)miniprogram/:微信小程序端cloudfunctions/api/:小程序云函数 API(云数据库 + OpenAPI)
- 匿名广场:
/square - 创建提问箱:
/box/new - 用户主页(对外):
/u/:receiverKey - 我的后台:
/me