Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

374
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda