Tengo una API express con un montón de rutas.
routes.get('/', perms('read', 'document'), r(CRUD.getAll)) routes.get('/search', perms('read', 'document'), r(CRUD.search)) routes.get('/:id', perms('read', 'document'), r(CRUD.getById)) Me aseguré de tener /search encima de /:id , sin embargo, cuando llega una nueva solicitud a /search , veo que ambos puntos finales obtienen un resultado (agregué un console.log dentro de cada función).
Intenté voltear los dos y, en ese caso, solo /:id obtiene un éxito.
¿Alguna idea de por qué puede estar pasando esto?
Piense en el enrutamiento Express como una matriz de controladores (middlewares), que tienen una regla coincidente (url). Cuando llega una solicitud, el enrutador comienza a verificar cada elemento de la matriz desde el principio. Si coincide con la regla, entonces se ejecuta el controlador (algunos no tienen condiciones, por lo que solo se ejecutan en cada solicitud :)). ¡La cadena de solicitudes no termina cuando coincide una sola URL! Puede ejecutar varios controladores en la misma solicitud (y así es exactamente como funcionan los middlewares).
Por lo tanto, realmente depende de lo que suceda dentro de su controlador. Puede indicarle que continúe con el siguiente elemento de la lista y, si hay una coincidencia, se ejecutará el siguiente controlador (como /search y /:id , que volverá a buscar).
Asegúrate de terminar tu respuesta. Ojo si llamas a next y con qué parámetros. Publique algunas muestras de los controladores para depurarlo más :)