如何在快递JS中获得匹配的路由模式?

And*_*Kon 8 node.js express

我希望我的记录器中间件在发送响应时记录每个匹配的路由.但是可能有任意数量的嵌套子路由.我想我有这个:

var app = express();
var router = express.Router();

app.use(function myLogger(req, res, next)
{
    res.send = function()
    {
        //Here I want to get matched route like this: '/router/smth/:id'
        //How can I do this?
    });
}

app.use('/router', router);

router.get('/smth/:id', function(req, res, next)
{
  res.send(response);
});
Run Code Online (Sandbox Code Playgroud)

可能吗?

srq*_*inn 11

由于应用级中间件不了解路由,因此这是不可能的.但是,如果您使用记录器中间件作为路由中间件,例如:

router.get('/smith/:id', logger, function (req, res) { ... });
Run Code Online (Sandbox Code Playgroud)

您可以在请求对象上使用两个参数的组合:

req.route.path => '/smth/:id'
req.originalurl => '/router/smth/123'
Run Code Online (Sandbox Code Playgroud)

我会告诉你如何将两者结合成一个字符串.

  • 看起来不再支持“req.route”。我怎样才能在最新版本的“express”中做到这一点? (2认同)
  • 是啊。我是表达新手,所以我尝试在应用程序级中间件中使用“console.log(req.route)”,它在其中打印“未定义”。但是,当我在路由器级中间件中执行相同操作时,它会打印链接显示的内容。多谢。 (2认同)