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

426
Vistas
¿Hay una manera fácil de mantener los parámetros de consulta en los redireccionamientos en NestJS?

Soy bastante nuevo en este tipo de cosas, por lo que agradezco cualquier consejo, especialmente si hay una mejor manera de resolver esto que lo que estoy buscando.

Estoy tratando de admitir un punto de conexión anterior al redirigirlo a un punto de conexión nuevo, y ambos puntos de conexión deberían admitir parámetros de consulta. Cada punto final vive en un controlador separado.

Ejemplo: quiero que /old-namespace/getStuff?foo=bar redirija a /new-namespace/getStuff?foo=bar sin reconstruir manualmente una cadena de consulta como señalan los documentos de Nest, porque los parámetros pueden ser dinámicos.

Mirando los documentos de NestJS , hay un práctico decorador @Redirect que puede usar en un punto final como este, para redirigir fácilmente la solicitud a una URL diferente:

 @Get('docs') @Redirect('https://docs.nestjs.com', 302) getDocs(@Query('version') version) { if (version && version === '5') { return { url: 'https://docs.nestjs.com/v5/' }; } }

Sin embargo, al usar esto, request.query se borra en la redirección (bastante seguro de que este es el comportamiento esperado). ¿Alguien tiene una solución mínimamente invasiva para esto? Probé la creación de middleware/interceptores/decoradores personalizados para sortear esto con diversos grados de éxito, pero eso parece una mano dura y desearía que hubiera una manera de agregar un parámetro adicional en el decorador @Redirect como retainQuery = true o alguna cosa.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Terminé usando la respuesta principal aquí: ¿Cómo reescribir la ruta de URL en Nestjs?

La primera respuesta de Ambroise Rabier sobre las reescrituras de nginx me indicó que buscara una solución de middleware simple, ya que no quería inyectar un servicio en varios lugares, ya que habrá bastantes pequeños redireccionamientos de los espacios de nombres antiguos a los nuevos.

En un módulo común:

 consumer .apply(RewriteApiEndpointMiddleware) .forRoutes('/')

En un software intermedio:

 import { Injectable, NestMiddleware } from '@nestjs/common'; @Injectable() export class RewriteApiEndpointMiddleware implements NestMiddleware { use(req: any, res: any, next: () => void) { // the linked answer replaced "api" but in my case I needed to send "app" requests somewhere else req.url = req.url.replace(/^\/app/, '/new-namespace'); next(); } }
over 4 years ago · Santiago Trujillo Denunciar

0

Lo que necesitas se llama reescribir en nginx.

No sé si funciona, pero tal vez usted puede hacer eso?

 @Get('/old-namespace/getStuff') getStuff(@Query() query) { // Done ! getNewStuff(query); } @Get('/new-namespace/getStuff') getNewStuff(@Query() query) { }

Si no, siempre puedes hacer algo como:

 function handleGetNewStuff() { } @Get('/old-namespace/getStuff') getStuff(@Query() query) { handleGetNewStuff(query); } @Get('/new-namespace/getStuff') getNewStuff(@Query() query) { handleGetNewStuff(query); }

Sin embargo, si su problema es cambiar el enlace en el lado del usuario (y no solo para el enrutamiento interno), puede intentar (tampoco probado):

 @Get('/old-namespace/getStuff') getStuff(@Req() request, @Res() response) { const newURL = req.originalUrl.replace('old', 'new'); response.redirect(newURL); }

Recuerde que NestJS usa expressJS a continuación.

over 4 years ago · Santiago Trujillo 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