router.get("customer/:customerId", async (request, response) => { console.log("Fetch customer with a particular customer ID") } router.get("customer/regions", async (request, response) => { console.log("Fetch all customers from a region") }Pero cada vez que hago una solicitud, la primera API atiende la solicitud (las regiones se consideran como ID de cliente) y no la segunda. ¿Cómo podemos tener asignaciones de URL en este tipo de escenarios?
Puede manejar este problema de tres maneras.
Una es cambiar el orden de sus dos router.get() s. Express los maneja en orden. Tal como lo tiene, express piensa que regions son un ID de cliente.
Otra es agregar una expresión regular a su parámetro de ruta :customerId. Por ejemplo, si sus ID de cliente son números de 12 dígitos, puede hacer esto para evitar que esa ruta maneje cualquier cosa excepto URL de estilo customer/123456654321 .
router.get("customer/:customerId(\d{12})", async (request, response) => { console.log("Fetch customer with a particular customer ID") }Una tercera es usar el parámetro next(). Le dice a express que su controlador de ruta rechaza la URL y que continúe para probar otras rutas coincidentes.
router.get("customer/:customerId(\d{12})", async (req, res, next) => { if (<<it's an invalid customerId>>) return next() console.log("Fetch customer with a particular customer ID") }Probablemente debería usar next() de todos modos para rechazar ID de cliente no válidos, y debería usar valores de ID de cliente aleatorios difíciles de adivinar. Porque Panera Pan .