Express动态路由被添加到静态路由中间件堆栈

时间:2015-03-31 12:45:58

标签: node.js express

我正在定义静态& Express中的动态路由,我已经构建了一个通用响应器来向客户端发送响应。响应者对所有路由都是全局的,因此在最后添加。

但是,当我定义静态路由时,匹配动态路由的中间件会在响应者之前添加到堆栈中。

举例说明:

server.get('/hello/test', function(req, res, next) {
    console.log('/hello/test');
    next();
});
server.get('/hello/:page', function(req, res, next) {
    console.log('/hello/:page');
    next();
});
server.use(function(req, res, next) {
    res.status(200).send('test');
});

在响应者中间件被调用之前,调用curl localhost:3000/hello/test将console.log同时'/ hello / test'和'/ hello /:page'。我只想要调用第一个匹配的路由中间件。

无论如何都要阻止这种行为吗?

1 个答案:

答案 0 :(得分:0)

方法next()将控件传递给下一个处理程序。 您可以解决您的问题,只需从路由中删除next()调用,并将中间件放入函数中:

server.get('/hello/test', myMiddleware(req, res, next), function(req, res) {
    console.log('/hello/test');
});
server.get('/hello/test_b', myMiddleware(req, res, next), function(req, res) {
    console.log('/hello/test_b');
});
server.get('/hello/:page', myMiddleware(req, res, next), function(req, res) {
    console.log('/hello/:page');
});
server.get('*', myMiddleware(req, res, next), function (req, res) {
    res.type('txt').send('Not found');
});


function myMiddleware(req, res, next) {
    console.Log("in midleware")
    next();
}