Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

364
Vistas
obtener parámetros expresos en un middleware interceptor

Me gustaría interceptar un elemento req.params en una capa de intercepción:

digamos que tengo una instancia de aplicación de servidor express:

 const app = express();

con una capa de interceptación:

 app.use((req, res, next) => { console.log(req.params.myParam); next(); })

y muchos puntos finales como este:

 app.get('/anything/:myParam', (req, res) => res.send('hello'))

esto registra 'indefinido', lo cual es bastante natural porque cuando se ejecuta el middleware de intercepción dentro del "uso", el nombre del parámetro aún no se ha definido. Pero realmente necesito saber en esta capa de intercepción el valor del parámetro myParam con estas restricciones:

  • Sabía cómo se supone que debe nombrarse el parámetro en los puntos finales interceptados (myParam)
  • No puedo saber cómo está estructurada la URL en los extremos interceptados (puede ser /cualquier cosa/:miParam, o /:miParam/cualquier cosa, etc.)

¿Alguien sabe una solución para ese caso?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

El comentario de @indrajaj26 sobre el uso de app.param() me lleva a una solución funcional.

Aquí está la forma en que estoy procediendo:

 /** express application */ const app = express(); // Interception layer app.param('myParam', (req, res, next, myParam) => { /* Store myParam into something reusable (like locals as suggested by @nullromo for instance). * I'm using zonejs in my case: creating a forked zone with myParam stored in zone properties. */ next(); }); // Consuming intercepted data. Anywhere in the callstack of any endpoint using "myParam" as request parameter: console.log(Zone.current.getZoneWith('myParam')?.get('myParam'));

¡Gracias a todos por sus ideas!

about 4 years ago · Juan Pablo Isaza Denunciar

0

Una solución simple sería pasar la función de middleware al definir la ruta.

Ejemplo:

 function middleware(req, res, next) { console.log(req.params.myParam); next(); } app.get('/path', middleware, function(req, res) { ... });

Ejemplo completo:

 const express = require('express'); const app = express(); function middleware(req, res, next) { console.log(req.params.myParam); next(); } app.get('/path', middleware, function(req, res) { ... }); app.listen(3000, () => console.log('server is online'));
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede almacenar los parámetros en el objeto response.locals para que los use el middleware posterior.

 const express = require('express'); const app = express(); app.get('/:name', (request, response, next) => { // generate some kind of result const result = `Hello, ${request.params.name ?? 'world'}!`; // save the result and the params onto the request.locals object response.locals = { params: request.params, result }; // call the next middleware to pass on the params and result next(); }); app.use((request, response, next) => { // here you have the params since they were parsed by the previous middleware console.log(`Intercepted: ${JSON.stringify(response.locals.params)}`); // now actually send the response that you wanted to send response.status(200).send(response.locals.result); }); app.listen(3000, () => { console.log('listening'); });

Esto requiere almacenar request.params en el objeto response.locals en cada controlador, que no es el mejor. Pero también significa que no tiene que especificar el middleware del interceptor cada vez, si eso es un problema para su caso.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda