Obtener definición de ruta en middleware

¿Alguien sabe si es posible obtener la ruta utilizada para activar la ruta?

Por ejemplo, digamos que tengo esto:

app.get('/user/:id', function(req, res) {}); 

Con el siguiente middleware simple en uso

 function(req, res, next) { req.? }); 

Me gustaría poder obtener /user/:id dentro del middleware, esto no es req.url .

Lo que quieres es req.route.path .

Por ejemplo:

 app.get('/user/:id?', function(req, res){ console.log(req.route); }); // outputs something like { path: '/user/:id?', method: 'get', callbacks: [ [Function] ], keys: [ { name: 'id', optional: true } ], regexp: /^\/user(?:\/([^\/]+?))?\/?$/i, params: [ id: '12' ] } 

http://expressjs.com/api.html#req.route


EDITAR:

Como se explica en los comentarios, obtener req.route en un middleware es difícil / intruso. El middleware del enrutador es el que llena el objeto req.route , y probablemente se encuentra en un nivel más bajo que el middleware que está desarrollando.

De esta manera, obtener req.route solo es posible si se req.route al middleware del enrutador para analizar la req por usted antes de que lo ejecute Express.

FWIW, otras dos opciones:

 // this will only be called *after* the request has been handled app.use(function(req, res, next) { res.on('finish', function() { console.log('R', req.route); }); next(); }); // use the middleware on specific requests only var middleware = function(req, res, next) { console.log('R', req.route); next(); }; app.get('/user/:id?', middleware, function(req, res) { ... }); 

Este truco desagradable con la anulación de prototipos ayudará

  "use strict" var Route = require("express").Route; module.exports = function () { let defaultImplementation = Route.prototype.dispatch; Route.prototype.dispatch = function handle(req, res, next) { someMethod(req, res); //req.route is available here defaultImplementation.call(this, req, res, next); }; };