独立开发复盘:我用 Node.js 做了个在线工具箱
文章目录
- [独立开发复盘:我用 Node.js 做了个在线工具箱](#独立开发复盘:我用 Node.js 做了个在线工具箱)
-
- 前言
- 一、为什么做这个
- 二、网站有什么功能
- 三、产品设计上的一些思考
-
- [3.1 免费和付费的边界怎么划](#3.1 免费和付费的边界怎么划)
- [3.2 不接支付,只显示收款码](#3.2 不接支付,只显示收款码)
- [3.3 判断用户权限只需要一个字段](#3.3 判断用户权限只需要一个字段)
- 四、踩过的坑
-
- [坑 1:`CREATE TABLE IF NOT EXISTS` 的陷阱](#坑 1:
CREATE TABLE IF NOT EXISTS的陷阱) - [坑 2:CDN 被浏览器插件篡改](#坑 2:CDN 被浏览器插件篡改)
- [坑 3:`res.json()` 报 "Unexpected character"](#坑 3:
res.json()报 "Unexpected character") - [坑 4:删除接口必须带 user_id](#坑 4:删除接口必须带 user_id)
- [坑 1:`CREATE TABLE IF NOT EXISTS` 的陷阱](#坑 1:
- 五、部署:从一台电脑起步
- 六、接下来的计划
- 七、写给想做类似项目的朋友
- 八、体验地址
- 结尾
前言
最近利用业余时间做了个小项目:一个在线工具箱网站。
平时自己用,也想着分享给有需要的人。这篇文章不是技术教程 ,主要复盘一下产品思路和踩过的坑,给想做类似项目的朋友参考。
网站叫"万能工具箱",功能不复杂,但每一步都踩了不少坑。
一、为什么做这个
起因是自己有需求。
平时写代码、写文档,经常要用到一些小工具:
- 对比两段文本差异
- 生成随机密码
- 格式化 JSON
- 生成二维码
但用过的工具站都很难受:
- 广告太多,点开全是弹窗
- 强制注册,用一次就要登录
- 界面老旧,一看就是 2010 年的设计
于是我想:能不能做一个干净、好用、简单的?
二、网站有什么功能

分两类:基础工具 和进阶工具。
基础工具(不需要登录)
| 工具 | 用途 |
|---|---|
| 文本对比 | 高亮差异,做校对和 code review 方便 |
| 字数统计 | 字符、单词、行数、段落、中文字数 |
| 密码生成器 | 自定义长度和字符类型 |
| JSON 格式化 | 美化、压缩、校验 |
这几个做得比较轻,打开就能用。
进阶工具(需要登录)
| 工具 | 用途 |
|---|---|
| 二维码生成 | 文本/链接转二维码,可下载 |
| 图片压缩 | 本地压缩,图片不上传服务器 |
这两个后面做了一些权限控制,涉及服务器资源和用户体验的设计,放到下一节讲。
额外小功能
私人留言板:每个用户只能看到自己的留言,相当于一个云端记事本。
三、产品设计上的一些思考
3.1 免费和付费的边界怎么划
这是做这类产品最关键的问题。
我的原则是:日常高频、零成本的功能免费;有服务器成本、深度需求的功能收费。
具体一点:
- 纯前端能做的 → 免费(比如文本对比、JSON 格式化)
- 需要算法库、CDN 资源的 → 进阶功能
- 有带宽、存储成本的 → 进阶功能
不要为了收费而收费,用户能感觉到。
3.2 不接支付,只显示收款码
很多独立开发者一上来就想接微信支付,结果发现:
- 需要企业资质
- 需要备案
- 需要支付接口审核
- 一搞就是一个月
我的做法:不接支付,只显示收款码。
用户付款后,我手动在数据库里给他开通。
看起来"不自动化",但好处是:
- 用户不多时,手动处理 10 秒的事
- 用户有疑虑可以直接问,转化率反而高
- 不用碰支付牌照,不惹监管
- 等订单量大了再考虑自动化
💡 独立开发者最容易犯的错:过度设计。
3.3 判断用户权限只需要一个字段
数据库里 users 表加一个 plan 字段就够了:
plan = 'free'→ 基础用户plan = 'pro'→ 进阶用户
再加一个 pro_expire_at 字段表示到期时间,NULL 就是永久。
就这两个字段,全站权限通用。
不需要复杂的 RBAC 系统,不需要一堆权限表。
四、踩过的坑
坑 1:CREATE TABLE IF NOT EXISTS 的陷阱
早期我改过表结构,加了个字段。结果程序启动时看到表已存在,跳过了建表语句,导致新字段不存在,所有查询报错。
教训 :改表结构后,手动执行 ALTER TABLE 或 DROP TABLE,别指望 IF NOT EXISTS 帮你。
坑 2:CDN 被浏览器插件篡改
用 cdn.jsdelivr.net 加载某个 JS 库时,某些广告拦截插件会把它改写成 text/plain,浏览器拒绝加载,报错:
NS_ERROR_CORRUPTED_CONTENT
MIME 类型不匹配
解决:换成国内 CDN(如 bootcdn),或把库下载到本地。
坑 3:res.json() 报 "Unexpected character"
前端报错:
JSON.parse: unexpected character at line 1 column 1
原因 :后端返回的不是 JSON,通常是接口路径写错,返回了 index.html。
排查:F12 → Network → 看那个请求的响应内容。
坑 4:删除接口必须带 user_id
留言板的删除接口一开始写成:
sql
DELETE FROM messages WHERE id = ?
这是灾难性漏洞 ------ 任何人猜到 ID 就能删别人的留言。
正确写法:
sql
DELETE FROM messages WHERE id = ? AND user_id = ?
记住:所有操作别人数据的接口,必须带"归属判断"。
五、部署:从一台电脑起步
一开始我没买服务器,用最便宜的方式跑:
电脑(本地跑服务)
↓
进程守护工具(让服务不掉)
↓
内网穿透(映射端口到公网)
↓
外网用户访问
成本:0 元。
代价:电脑要一直开着,偶尔会掉线。
为什么先这么干?
- 还没用户 → 买服务器可能是浪费
- 验证需求 → 有用户了再升级
- 先用最便宜的方案跑起来,验证有需求再投入
什么时候该升级到服务器?
- 有人抱怨"经常打不开"
- 免费流量经常跑满
- 有稳定用户了
六、接下来的计划
- 加几个常用工具(时间戳转换、单位换算)
- 加一些深度功能(PDF 处理、图片批处理)
- 优化移动端体验
- 有用户后上线正式服务器
七、写给想做类似项目的朋友
三个建议:
- 不要一上来就搞全自动。手动处理用户不丢人,先验证有没有人真的需要。
- 不要追求技术栈先进。能跑、好改、上线快,比什么都重要。
- 不要过度设计。用户少的时候,手动操作反而是最优解。
还有一点:先跑起来,其他都是后话。
我见过太多人,想法很好,技术也够,但就是迟迟不上线:
- 想等界面完美再发
- 想等支付接好再发
- 想等服务器买好再发
结果一个月过去了,项目还在本地。
八、体验地址
想试用的朋友可以访问:
目前是测试环境,部署在自己电脑上,偶尔可能打不开,多刷新几次。
欢迎评论告诉我:
- 哪个工具好用
- 哪里需要改进
- 还想要什么工具
每条评论我都会看。
谢谢支持。
结尾
如果这篇文章对你有启发,欢迎点赞、收藏、关注。