当钩子可以执行相同的功能时,express 中间件在 feathersjs 中的作用是什么?

What is the role of express middleware in feathersjs when hooks can perform the same functionality?

feathers generate app命令中我们有一个名为middleware的文件夹,用于向服务添加任何中间件功能,但是hooks可以实现同样的功能,为什么提供中间件?我错过了什么吗?

你是对的,钩子几乎可以做 Express 中间件可以做的任何事情。区别在于它们 与传输无关 。这意味着无论您是通过 websocket (Socket.io)、HTTP (Express) 还是任何其他类型的连接在内部使用该服务,挂钩都会起作用。我在 Design patterns for modern web APIs.

中详细介绍了这种传输独立设计的好处

Feathers 与 Express 完全兼容,这意味着您仍然可以使用普通的中间件,但大多数 Feathers 应用程序只有很少或通常根本没有中间件。您仍会使用 Express 中间件(在使用 Socket.io 连接时不 运行 )的原因是在特定于 HTTP 请求和响应的事物之间进行转换。这样服务和挂钩就可以以一种他们不必知道这些信息来自哪里的方式来处理它。一些例子是

对于任何其他你可以而且应该使用钩子。这样您的应用程序将永不过时,并且在迁移到不同的传输机制时您无需更改任何内容。