成为全栈

FungLeo3 天前
react·rbac·路由守卫·权限控制·前端权限·成为全栈
成为全栈·React 管理后台篇·按钮级权限:能力映射、菜单过滤与自锁保护前端权限的价值是让用户只看到能够完成的操作,并在高风险场景阻止明显误操作。真正的安全边界仍在后端。权限功能很容易从一行判断开始:user.role === 'admin'。用户管理菜单里写一次,路由里写一次,重置密码按钮再写一次。后来产品允许 editor 查看某个页面,三处条件只改了两处,于是菜单能点、路由却跳 403;或者直接输入地址能进,页面按钮又全部消失。
FungLeo3 天前
react·内容安全·状态机·交互设计·成为全栈·评论审核
成为全栈·React 管理后台篇·评论审核工作流:把状态下拉改成可理解的动作审核人员需要判断内容并采取动作,而不是替系统翻译状态枚举。界面要同时提供原文、上下文、理由和明确结果。
FungLeo4 天前
图片上传·react·响应式设计·markdown编辑器·异步编程·成为全栈
成为全栈·React 管理后台篇·Markdown 编辑器:预览、暗色主题与连续图片粘贴把 Markdown 编辑器渲染出来并不难。真正决定它能否用于写作的,是受控值、异步上传、光标位置、连续操作和响应式布局之间能不能保持一致。
FungLeo5 天前
react·表单设计·zod·react hook form·成为全栈·数据回填
成为全栈·React 管理后台篇·表单页范式:校验、数据回填与未保存保护表单可靠性不只取决于校验规则。远端数据什么时候写入、什么算已保存、离开页面时是否仍有任务进行,决定了用户会不会丢掉已经完成的工作。
FungLeo5 天前
react·前端架构·分页查询·react router·成为全栈·url状态
成为全栈·React 管理后台篇·列表页范式:让分页、筛选和返回位置进入 URL页码、筛选和排序不是表格组件的临时状态,而是“用户正在查看哪一组数据”的完整描述。只要这个描述值得刷新、返回或分享,就应该进入 URL。
FungLeo6 天前
react·状态管理·zustand·react hook form·成为全栈·tanstack query
成为全栈·React 管理后台篇·服务端状态、会话状态、界面状态:不要都塞进 Zustand状态管理真正困难的地方,不是选 Redux、Zustand 还是 Context,而是判断一份数据究竟由谁拥有、什么时候失效,以及谁有权修改它。
FungLeo6 天前
react·路由守卫·zustand·刷新令牌·成为全栈·前端鉴权
成为全栈·React 管理后台篇·前端鉴权闭环:内存令牌、刷新旋转与路由守卫登录页拿到 token 只是鉴权的起点。刷新页面、多个请求同时过期、账号被禁用和主动登出之后,界面仍能给出一致结果,才算形成闭环。
FungLeo8 天前
react·管理后台·权限控制·react router·前端路由·成为全栈
成为全栈·React 管理后台篇·后台骨架:布局、数据路由与分层守卫后台骨架不只是左边一条侧栏、上面一根顶栏。真正重要的是:用户从哪个入口进来、看到什么菜单、手动输入地址时能不能进入,三者必须说同一种权限语言。
FungLeo8 天前
node.js·成为全栈·点赞系统·幂等点赞·计数原子增减
成为全栈·Node 后端篇·点赞系统:幂等点赞与计数原子增减"点个赞"看着就是个数字 +1。可真要做对,至少有三个问题要回答:同一个人能不能重复点?网络抖动手滑点了两次算几次?并发一来,计数会不会漂?
FungLeo9 天前
node.js·成为全栈
成为全栈·Node 后端篇·辅助接口:相邻、相关、目录、统计与搜索读者看完一篇,最自然的三个念头是:下一篇看什么、这篇和哪篇相关、目录怎么跳。这些功能单个看都不难,可它们不属于核心 CRUD,常被做成"顺手加几个接口"——然后各自为政、口径不一,改一处漏三处。
FungLeo10 天前
node.js·成为全栈·通知系统·事件消费·已读状态管理
成为全栈·Node 后端篇·通知系统:事件消费与已读态管理文章发布成功了、评论被通过了——这些事都发生在系统内部,用户凭什么知道?没有通知,用户只能靠"刷新看看"来感知,产品的互动链路就断在了最后一环。
FungLeo12 天前
单元测试·node.js·集成测试·测试策略·成为全栈·测试数据库
成为全栈·Node 后端篇·后端测试策略:单元、集成与测试数据库一个项目测试全绿、覆盖率 85%,上线第二天还是出了事故——这种事几乎每个团队都经历过。问题往往不在测试写得少,而在测得不对:正常路径重复测了十遍,边界和并发一处没碰。
FungLeo12 天前
node.js·敏感词过滤·成为全栈·评论内容安全·评论审核·级联删除
成为全栈·Node 后端篇·评论内容安全:敏感词过滤、三态审核与级联删除评论区是社区产品最热闹的地方,也是最容易出事的地方。广告引流、辱骂、垃圾外链全靠它生长——你不处理,用户先被赶跑;你一刀切全删,社区就没了生气。难的是既要留得下,又要控得住。
FungLeo12 天前
node.js·读写分离·数据去重·接口防刷·成为全栈·数据冷却
成为全栈·Node 后端篇·阅读量防刷:去重、冷却与计数写分离各位看官,"阅读量 10086"这种数字,到底是人看的还是脚本刷的?如果一个接口每次被调用就 +1,那这个数字毫无意义——爬虫、刷新、自己点几十下都能注水,做得再花哨也是自欺欺人。
FungLeo14 天前
node.js·后端部署·成为全栈
成为全栈·Node 后端篇·部署上线:从本地起服到真正对外服务本地 pnpm start 跑通,和"用户能从公网访问你的接口"之间,隔着环境变量、数据库迁移、HTTPS、CORS、进程守护整整一串事。很多人第一次部署卡住的地方,其实不是代码,而是"我到底该配哪些东西"。
FungLeo15 天前
docker·node.js·dockerfile·成为全栈·后端服务容器·docker 容器
成为全栈·Node 后端篇·容器化:给 Node 应用写一个像样的 Dockerfile"在我机器上能跑"是软件工程最古老的笑话之一。你本地 pnpm start 一切正常,丢到测试服务器就报 better-sqlite3 找不到原生二进制;运维用老版本 Node 起服,顶层 await 直接语法报错。
FungLeo15 天前
node.js·全文索引·模糊搜索·全文搜索·成为全栈·like 搜索
成为全栈·Node 后端篇·全文搜索:从 LIKE 到全文索引搜索框是每个内容站都有的东西,也是最容易做成"能用但不好用"的东西。LIKE '%关键词%' 三行代码就能跑,可当文章上千、用户开始搜"全栈 工程师"这种带空格的中文短语时,你会发现它既搜不准、也搜不快。
FungLeo16 天前
node.js·openapi·成为全栈·接口文档自动化
成为全栈·Node 后端篇·接口文档自动化:让 OpenAPI 与代码不脱节新人入职第一天,照着 Swagger 调接口,结果调出一个 500。去问后端,后端说"这个字段上周就改了,文档没顾上"。这类事的根因不是谁偷懒,而是文档和代码本来就是两份东西——只要存在两份,它们迟早会漂移。
FungLeo16 天前
node.js·文件上传·成为全栈·cloudflare r2·文件去重
成为全栈·Node 后端篇·文件上传:R2 / 本地磁盘双实现与签名直传上传功能看着就三步:前端选文件、后端收下、存到某个地方。可真做起来你会发现,问题全在"收下之后"——同一个文件被传十次要不要存十份?用户把文件名改成 ../../etc/passwd 怎么办?传个 SVG 上来,别人点开就中招怎么办?文章删了,图还留在桶里算谁的?
FungLeo17 天前
node.js·状态机·crud·成为全栈
成为全栈·Node 后端篇·文章 CRUD 与投稿状态机假设你做了个内容站:会员注册、写了篇文章、点下"发布"——它就该直接出现在首页吗?如果全站只有你一个人写,那没问题;可一旦有第二个会员投稿,你会发现"发布"这个动作背后藏着一整套规则:谁能直接发、谁发完要等人审、审完算什么状态、删掉的文章到底算不算消失。