如何在Express应用程序中获取下一个路由的路径

4

在向前传递流量之前,我使用以下方法捕获所有流量:

app.all('*', function(req, res, next) {
    ... run before stuff, related to the next req.route.path
    next();
});

我希望在调用next()函数之前运行一些代码。为了知道我需要运行什么样的代码,我必须确定下一个请求路由路径。

调试当前的请求对象(在all('*',..)内)无法提供有关下一个request.route.path的任何信息。

在调用下一个方法route.path之前,我应该如何获取它?

非常感谢您的帮助。谢谢。


下一个路由是简单地匹配下一个路由。较高的路由首先进行测试,因此较低的路由最后进行测试。 - Ash
好的,接下来不是我所需要的正确词语,我怎么知道目标路由路径,原始路径,没有其中的参数,我的意思是 /user/:user_id/user_attr:user_attr? - shay te
2个回答

4

不妨为需要中间件的路由显式地设置中间件,而不是试图向前看。

var middleware = function (req, res, next) {
  ..run your code in here
};

app.get('/users:user_id', middleware, function(req, res, next) {

}); 

谢谢你的解决方案,我会尝试这种方法的 :) - shay te

2

当中间件响应触发finish事件时,您可以通过检查路由来获取下一个路由:

app.all('*', function(req, res, next) {
  res.on('finish', function() {
    console.log('Next route: ', req.route.path);
  });
  next();
});

对于以下定义的路由:

内容

app.get('/users/:user_id', function(req, res) {
  res.send('Hello');
});

您将获得日志:

$ 下一个路由:'/users/:user_id'

该路由与用户ID有关。

1
嘿,好棒的解决方案,我学到了一些东西。问题是我想为特定条目运行某种过滤器/前置操作,在实现“后置”过滤器方面这将非常有用。谢谢。 - shay te

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接