Intentando obtener parámetros de URL en express js, pero obtuve un objeto vacío.
var password= require('./routes/password'); app.use('/reset/:token',password);contraseña.js
router.get('/', function(req, res, next) { console.log(req.params); res.send(req.params); }); La salida de console.log(req.params) es {}
URL de acceso: http://localhost:3000/reset/CiVv6U9HUPlES3i0eUsNwK9zb7xVZpfHsQNuzMNWqLlGA4NJKoagwbcyiUZ8
De forma predeterminada, los enrutadores anidados no pasan ningún parámetro que se use en rutas de montaje desde sus enrutadores principales.
En su caso, la app es el enrutador principal, que usa /reset/:token como ruta de montaje, y el router es el enrutador anidado.
Si desea que el router pueda acceder a req.params.token , créelo de la siguiente manera:
let router = express.Router({ mergeParams : true });Documentado aquí .
Estás confundiendo parámetros y consultas.
Enfoque de consulta
Su código debería verse así cuando use valores de consulta para la URL de ejemplo: www.example.com?token=123&foo=bar
router.get('/', function(req, res, next) { console.log(req.query); console.log(req.query.token); // to log value of token console.log(req.query.foo); // to log value of foo res.send(req.query); });Enfoque de parámetros
Su código debería verse así cuando use valores de parámetros para la URL de ejemplo: www.example.com/123
router.get('/:token', function(req, res, next) { console.log(req.params); console.log(req.params.token); // to log value of token res.send(req.params); });En su lugar, puede usar un middleware para registrar los parámetros de la ruta:
const logger = (req, res, next)=>{ console.log(req.params) res.send(req.params) next()//<----very important to call it. }; app.use(logger); //<----use to apply in the app router.get('/', (req, res, next)=>res.send('Logged.'));