封装快速路由器

是否有可能使用不共享中间件的Express.Router创build不同的路由器?

对我来说,Express.Router似乎使用单身,所以无论我尝试什么,中间件都会连接到所有路由器。 因此,无需创buildExpress应用程序的多个实例,是否有办法实现以下function:

创build多路由器

var router_a = Express.Router(); var router_b = Express.Router(); 

给每个路由器独特的路由和中间件

 router_a.use(function(req, res, next){ console.log('Only works on router_a!'); }); router_a.get('/', function(req, res){ console.log('Only works on router_a!'); }); router_b.use(function(req, res, next){ console.log('Only works on router_b!'); }); router_b.get('/', function(req, res){ console.log('Only works on router_b!'); }); 

将每个路由附加到自定义URL名称空间

 app.use('/a', router_a); app.use('/b', router_b); 

有没有一个简单的方法来实现这一目标? 阅读路由器上的文档后,我没有看到任何暗示这种可能性的东西。

我从代码中看到的一件事就是在中间件中调用next() 。 如果我把它添加到你的代码,它对我来说工作得很好。

/b中间件仅在路由以/b开头并且/b路由为/b中间件时才被调用。 而且,要完成代码,还必须在.get()处理程序中发送响应。

以下是我刚刚testing的具体代码:

 var express = require('express'); var app = express(); var server = app.listen(80); app.use(express.static('public')); var router_a = express.Router(); var router_b = express.Router(); router_a.use(function(req, res, next){ console.log('.use() - Only works on router_a!'); next(); }); router_a.get('/', function(req, res){ console.log('.get() - Only works on router_a!'); res.send("router a, / route"); }); router_b.use(function(req, res, next){ console.log('.use() - Only works on router_b!'); next(); }); router_b.get('/', function(req, res){ console.log('.get() - Only works on router_b!'); res.send("router b, / route"); }); app.use('/a', router_a); app.use('/b', router_b);