封装高速路由器

时间:2016-01-21 18:11:29

标签: node.js express routing

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

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

创建多路径路由器

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!');
});

将每条路线附加到自定义网址命名空间

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

有没有直接的方法来实现这一目标?在阅读了路由器上的文档后,我没有看到任何暗示可行的文件。

1 个答案:

答案 0 :(得分:2)

我在代码中看到的一件事就是调用中间件中的next()。如果我将它添加到您的代码中,它对我来说非常好。

仅当路由以/b开头且/b中间件与/a路由相同时,才会调用/a中间件。而且,要完成代码,您还必须在.get()处理程序中发送回复。

以下是我刚测试的具体代码:

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);