文章举的例子实际上是滥用中间件而已,比如loadUser和role(‘admin’)这两个中间件可以重构为一个rbac的中间件来解决
我感觉滥用中间件才是问题的核心
摘录express 4.0文档里的一段话
The “mount” path is stripped and is not visible to the middleware function. The main effect of this feature is that mounted middleware may operate without code changes regardless of its “prefix” pathname.
除了文字原本的意思之外,我的理解就是中间件不应该对上下文环境太敏感,一旦出现了几个中间件之间依赖的关系,那就应该检讨是否中间件的设计和抽象出问题了,或者就不该用中间件来解决
确实如此。不过这两个中间件都是摘自 TJ 写的演示代码,虽然考虑到他本来就是为了演示 Route Specific Middleware 的特性所以才把载入用户和验证权限分成两个中间件来写,但就我自身体验而言,中间件的依赖关系并不少见。至于“滥用”其实很难界定,越细分的中间件越灵活。
是的,这也是我开发 express-di 的目的——使用另一种模式代替中间件。
@luinlee 是,界定是否“滥用”有时候的确比较难,不知不觉的就发生了
不错!其实也可以考虑以trait或mixin的方式组合中间件。
听起来很有意思,有实现可以看吗?