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

158
Vistas
Declaración de ruta expresa

Tengo 2 rutas como,

 router.get("/project/:id", (req,res) => { console.log(1); }); router.get("/project/active", (req,res) => { console.log(2); })

Cada vez que llamo a la ruta /project/active, se llama a /project/:id route.

Cualquier consejo aquí ayudaría.

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

0

Su ruta comodín con :id en ella es codiciosa y coincide con todo, incluida la URL /project/active .

En esta definición de ruta:

 router.get("/project/:id", ...)

La parte :id es un comodín. Coincide con CUALQUIER COSA. Entonces, /project/anything coincidirá con eso, incluido /project/active . Dado que las rutas coinciden en Express en el orden en que se declaran, su router.get("/project/:id", ...) coincide primero y toma la solicitud.

Hay cuatro formas de evitar esto:

  1. No diseñes ni declares rutas en conflicto que puedan coincidir con una URL en particular. En este caso particular, cambiaría una de sus dos URL a algo único como /project/id/:id y /project/active o /project/:id y /activeproject . Entonces, estos dos controladores de ruta nunca entrarán en conflicto.

  2. Ordena con mucho cuidado tus rutas de la más específica a la menos específica. En este caso, colocaría router.get("/project/active", ...) antes router.get("/project/:id", ...) . Eso le da a la ruta más específica la oportunidad de coincidir antes de que la ruta comodín tome la solicitud. Pero, tenga en cuenta que esto significa que su valor de id nunca puede llamarse active .

  3. Si sus identificaciones son identificables de forma única y diferentes de cadenas como active (como supongamos que una identificación son todos números o siempre contiene algunos números), entonces puede codificar una expresión regular para la identificación que solo coincidiría con sus valores de identificación y no coincidiría con palabras regulares como `activo.

  4. Codifique su ruta comodín para verificar individualmente las cosas que no deberían coincidir y llame a next() para continuar enrutando a otras rutas.

over 4 years ago · Santiago Trujillo Denunciar

0

Eso sucede porque especifica una ruta dinámica antes de una ruta específica.

El correcto debe ser:

 router.get("/project/active", (req,res) => { console.log(2); }); router.get("/project/:id", (req,res) => { console.log(1); });

En Node.js, conocemos algo que se llama pila de middleware. Básicamente, sus solicitudes pasarán a través de middlewares hasta que algo dé una respuesta. Los enrutadores también son ejemplos de middleware.

En este caso, su ruta asume que /active es un id , como definió /:id primero antes de /active . Sucederían cosas diferentes (debería ser su comportamiento esperado) si cambiara el orden.

Referencias:

  • Pila de software intermedio
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