express.js 的路由器对象如何解析为 app.use() 只接受回调?

问题描述

express.js 的 router 对象是如何解析为 app.use() 的,它只接受回调,因为 router 是 express 的对象,我想了解为什么 app.use() 不会抛出错误,即使 router 是一个object 和 app.use() 需要回调?

解决方法

来自app.use documentation

callback

回调函数;可以是:

  • 一个中间件功能。
  • 一系列中间件函数(以逗号分隔)。
  • 一组中间件函数。

以上所有的组合。

...

由于 routerapp 实现了中间件接口,您可以像使用任何其他中间件功能一样使用它们。

(我在最后强调)

这就是答案。 approuter 都是函数,调用时遵循中间件协议。 (请记住,JavaScript 中的函数是对象,因此它们可以具有属性和方法。)

,

当使用单个回调函数时 - 它作为中间件用于所有路由。示例:正文解析器、记录器等