Fastify 的一个核心原则是:如果某个能力可以做成插件,那它就应该是插件。
这意味着你的物流中枢不是一个巨大的单厅,而是很多独立仓区组成的系统。
async function shipmentPlugin (fastify) {
fastify.get('/shipments', async function () {
return [{ id: 'S1001' }]
})
}
await fastify.register(shipmentPlugin, { prefix: '/api' })这里最关键的不只是 register,而是它背后的封装性。
#register 默认会创建新作用域
主中枢
│
├── 注册 A 仓区
│ ├── A 的装饰器
│ ├── A 的 hooks
│ └── A 的 routes
│
└── 注册 B 仓区
├── B 的装饰器
├── B 的 hooks
└── B 的 routesA 仓区里新增的设施,默认不会倒流污染整个主中枢。
这就是 Fastify 很重要的工程优势:封装和继承形成一张 DAG,而不是全局泥潭。
概念图:
root
├── auth-plugin
│ └── admin-routes
└── public-plugin
└── shipment-routes#为什么这比“所有中间件全局挂一遍”更稳
因为大型系统真正难的不是“先跑起来”,而是:
- 不同模块别互相踩
- 局部规则别污染全局
- 新仓区上线别把老仓区带崩
Fastify 的插件体系就是在解决这个问题。