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

183
Visualizações
¿Cómo enrutar correctamente diferentes rutas con ExpressJS/ NodeJS?

Inicialmente tuve un problema en el que tenía dos rutas separadas y distintas para mi servidor nodeJS así:

Path A para buscar todas las empresas cerca de las coordenadas latlng:

 app.get("/:lat/:lng/", (req, res) => {

Path B para obtener reseñas de negocios específicos.

 app.get('/businesses/:businessID/reviews', (req, res)=>{

Tan pronto como modifique Path A para agregar un parámetro de categoría:

 app.get("/:lat/:lng/:searchCategory", (req, res) => {

Path B arroja el código de error 400 y ya no obtiene reseñas. Descubrí una solución de "bandaid" simplemente extendiendo la longitud de los parámetros en mi Path A de esta manera:

 app.get("/:lat/:lng/category/:searchCategory", (req, res) => {

Todo está funcionando como se esperaba ahora, pero quiero saber qué está sucediendo y por qué. Realmente no pude encontrar una explicación. Parece que estoy siguiendo todos los documentos y reglas de ExpressJS. Cualquier idea sería apreciada. ¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Las rutas que consisten completamente en comodines (especificaciones que coinciden con CUALQUIER COSA) generalmente son un problema en Express. Si bien un diseño extremadamente cuidadoso a veces puede hacer que esto funcione, es muy fácil entrar en conflicto con otras rutas porque las rutas comodín coinciden con CUALQUIER COSA, incluso otras cosas que desea usar como rutas diferentes. Además, estas rutas comodín de nivel superior a menudo causan problemas de diseño y expansión en el futuro porque si desea agregar nuevas rutas de nivel superior en el futuro, sus opciones pueden estar limitadas debido a las rutas comodín anteriores que permitió.

La opción más segura y más simple es NO usar rutas comodín de nivel superior en absoluto. Siempre use algún prefijo que no sea comodín en cada ruta como este:

 app.get("/loc/:lat/:lng/", ...);

Dado que este no es un comodín de nivel superior, no entrará en conflicto con ninguna otra ruta de nivel superior siempre que no comience con /loc .

Luego, también podría tener estos para acompañarlo y ninguno entraría en conflicto:

 app.get("/loc/:lat/:lng/:searchCategory", ...) app.get('/businesses/:businessID/reviews', ...)

Tenga en cuenta que el tema común aquí es que cada familia de rutas tiene su propio segmento de ruta sin comodín de nivel superior. En el caso de estas tres rutas, usan /loc y /businesses y eso las separa claramente para que no entren en conflicto. Luego, dentro de /loc , tiene uno con dos parámetros y otro con tres parámetros para que no entren en conflicto.


Si quieres saber por qué estos dos entran en conflicto:

 app.get("/:lat/:lng/:searchCategory", ...) app.get('/businesses/:businessID/reviews', ...)

es porque ambos son URL de tres parámetros y el primero acepta tres comodines, por lo que coincide con CUALQUIER URL de tres parámetros, no solo con los URL que contienen valores de latitud y longitud.

Técnicamente, podría invertir estas definiciones para separarlas:

 app.get('/businesses/:businessID/reviews', ...) app.get("/:lat/:lng/:searchCategory", ...)

Y esto funcionaría, pero crear una estructura de URL que entre en conflicto en principio y solo funcione si define todas las rutas en el orden correcto exacto es un dolor de cabeza de mantenimiento en el futuro y es propenso a romperse con un simple cambio en el código o es propenso a quedar atrapado en algún momento en el futuro cuando no pueda extender su estructura de URL de la manera que desea debido a las rutas comodín anteriores.

Por lo tanto, mi consejo es evitar las rutas comodín de nivel superior. Si cada URL que contiene un comodín tiene su propio especificador de nivel superior que no es comodín, entonces todas las rutas comodín se separan de forma única y no hay conflictos ni problemas de ordenación.

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