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