Feathers.js 的 Services 与 Hooks 设计
真正把 Feathers.js 用起来之后,很快会遇到一个问题: service 到底该写多厚,hook 到底该放多少逻辑?这个边界如果不早点想清楚,项目照样会越写越乱。
真正把 Feathers.js 用起来之后,很快会遇到一个问题: service 到底该写多厚,hook 到底该放多少逻辑?这个边界如果不早点想清楚,项目照样会越写越乱。
很多后台项目在权限设计上都会经历一个阶段: 一开始觉得只要登录就够了,后来页面越来越多、角色越来越多,接口权限判断开始四处散落。
Feathers.js 很适合做资源型接口,但只要后台系统开始出现列表页、筛选器和搜索框,params.query 很快就会从一小块对象膨胀成谁都不敢碰的入口。
Feathers.js 写着写着,大家迟早会遇到一个现实问题: 错误到底该在 hook 层拦,还是在 service 里抛,还是统一让框架接住以后再返回前端。
2021 年如果还在继续做 Node.js 后端,会明显感觉到一个趋势: 大家不再满足于“能把接口写出来”这件事了,而是开始追求更快搭后台、更容易扩展认证、更自然接入实时能力。
Feathers.js 在 2021 年让我觉得很有意思的一点,是它不是把实时能力当成“额外插件”,而是直接把 service 事件当成天然的推送源。
刚开始接触 Feathers.js 时,很多人会先被 service 和 hook 吸引,但真正把项目落地到后台管理系统,很快就会遇到一个更实际的问题: 登录链路到底怎么搭才不乱。
Node.js 项目最容易让人产生一种错觉:只要把 Node 装上、包管理器装上,环境就算齐了。可到了 2020 年左右,团队里同时使用 nvm、Node、Yarn 已经很普遍,这时候真正容易出问题的,不再是某个工具会不会装,而是它们之间的版本边界有没有讲清楚。
刚开始用 Sequelize 的时候,模型定义很像一件机械活:写字段、配表名、导出模型,就结束了。可项目一大,模型之间开始出现 belongsTo、hasMany、belongsToMany 这类关联之后,我越来越觉得“模型怎么注册、谁先初始化”已经不是小事了。
表面上看,CommonJS 迁移到 ES Module 很像一次语法替换:require 换成 import,module.exports 换成 export。可 2019 年前后我自己在项目里碰这件事时,真正拖慢进度的从来不是语法本身,而是模块边界和运行上下文没先想明白。