封装快速路由器
是否有可能使用不共享中间件的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);