express.js中的中间件排序混乱?

express.js中的中间件排序混乱?,express,Express,据我所知,在路由声明(如app.get('/hello'))之前,在中间件上调用app.use,会导致中间件在到达路由功能之前在请求上运行。当您遇到至少有三条路由和三个中间件的情况时,我会感到困惑,您希望这样设置: 路由1应该使用中间件A和B 路由2应该使用中间件B和C 路由3应该使用中间件A和C 我当然错过了一些东西,因为我目前的理解使得这样的设置不可能。没有办法在代码中对语句进行排序,从而允许这样的配置 如何做到这一点?我缺少什么?这应该很容易做到。像这样设置 app.use('/rou

据我所知,在路由声明(如
app.get('/hello')
)之前,在中间件上调用
app.use
,会导致中间件在到达路由功能之前在请求上运行。当您遇到至少有三条路由和三个中间件的情况时,我会感到困惑,您希望这样设置:

  • 路由1应该使用中间件A和B
  • 路由2应该使用中间件B和C
  • 路由3应该使用中间件A和C
我当然错过了一些东西,因为我目前的理解使得这样的设置不可能。没有办法在代码中对语句进行排序,从而允许这样的配置


如何做到这一点?我缺少什么?

这应该很容易做到。像这样设置

app.use('/route1', middlewareA, middlewareB, (req, res, next) => {})
app.use('/route2', middlewareB, middlewareC, (req, res, next) => {})
app.use('/route3', middlewareA, middlewareC, (req, res, next) => {})

当您这样定义路由时,中间件仅应用于特定路由。如果你像app.use(middlewareA)那样做,那么中间件将在它之后的所有路由中使用。

啊哈!我从来没有遇到过这样的声明方式。我没有意识到中间件可以作为附加参数传递给路由,我认为它是路由声明之前的一行。非常感谢。