Express.js路由器中间件重新排序

时间:2014-10-15 19:58:48

标签: node.js express

Express.js中,是否有一种标准方法可以重新排序在express#Router对象上注册的中间件?我有一种情况,可以通过express.static()动态注册应由应用程序提供的静态资产目录。但是,Router#use()方法(我用来注册新的资产目录)总是将中间件放在Router#stack的末尾。我希望这一开始。有没有办法实现这个目标?

我有一个工作实现,基本上反向遍历当前路由器的stack,选择第一个名为staticMiddleware的中间件,并将其从该位置移动到阵列的前面。这有效,但显然取决于Route的内部。我希望有另一种更标准的方法来实现相同的行为。

1 个答案:

答案 0 :(得分:1)

您可能希望在订单的开头有一个自定义路由,可以检查路径,将其与您要服务的目录列表(可以随时间变化)进行比较,然后提供静态内容,如果它路径匹配。

这只是express.static()的更智能版本,它可以在动态路径列表中运行,而不仅仅是预定义的路径。 express.static()并不多,所以你可以将它复制到你的函数中并使其变得更加智能。


显然有可能破解中间件堆栈并修改订单。我不知道这是否是一种支持的功能,或者只是人们已经想到的不支持的功能(将来可能会破坏)。以下是一篇讨论此内容的文章:https://www.exratione.com/2013/03/nodejs-abusing-express-3-to-enable-late-addition-of-middleware/