Rutado modular

Imagina este escenario: Tienes una tienda que vende mascotas, y un cliente quiere comprarte conejos y gatos.

Si utilizas los métodos básicos de enrutamiento definidos anteriormente, el código tendrá este aspecto:

Nota que hemos escrito las mismas rutas varias veces.

Sin embargo, escribir las rutas una y otra vez aumenta la redundancia y los errores tipográficos. Además, es útil hacer nuestro código más modular, ya que es una buena práctica.

Como programador, siempre quieres que tu código se vea más limpio. Para facilitar la lectura del código anterior, podemos utilizar dos métodos.

Usando app.route

Aquí es donde entra app.route. Escribirás la ruta una vez, y puedes encadenar múltiples manejadores de ruta.

Puedes implementar app.route de la siguiente manera:

app.route(PATH)
.get(callback)
.post(callback)
//can add more HTTP requests (.put, .delete, etc)

Ahora podemos reescribir el código :

El código se ve más limpio, y sólo había que introducir la ruta para cada petición HTTP una vez.

Sin embargo, hay una advertencia más: el parámetro username existe en todas las rutas. Escribir username una y otra vez sigue propiciando errores y redundancias. ¿Y si pudiéramos hacerlo aún más modular?

express.Router()

Podemos utilizar express.Router() para crear manejadores de rutas modulares y montables. Una instancia de Router es un sistema completo de middleware y enrutamiento, por lo que a menudo se le denomina «miniapp».

Sólo tenemos que especificar el punto de partida, y la instancia de Router se encargará del resto por nosotros.

Para usar app.Router(), tenemos que crear un módulo independiente, instanciar una instancia de app.Router, y luego usar module.exports para exportar la instancia.

Para más detalles sobre el uso de module.exports, consulta mi artículo anterior.

En este ejemplo, sólo manejaremos una ruta simple que contendría los parámetros username y id.

En routerExample.js:

Usamos router.route(), que es similar a app.route. El módulo definido dice: «Siempre que la ruta vaya a terminar con /:username/:id, ejecuta el siguiente código definido.»

Para usarlo, utiliza otro módulo, main.js:

Como dicen los comentarios, usamos app.use para decirle a routeExample.js que ejecute las funciones que tienen rutas que empiezan por el primer parámetro. El primer parámetro se puede denominar como punto de partida. Por tanto, la ruta será starting point + PATH defined by router.

Por ejemplo, según la línea 6, ahora manejaremos las peticiones GET y POST que empiecen por ‘/cats’. Tendrán la ruta cats/:username/:id.

Como siempre, puedes utilizar diferentes rutas en el módulo routeExample, pero lo único que debes especificar es el punto de inicio en app.use.

Para ejecutar el código, escribe node main en una ventana de terminal y utiliza cURL en otra ventana como corresponde.

Diferentes rutas en express.Router con middleware

En este ejemplo, navegaremos a la página de inicio de Birds de nuestra tienda de mascotas y definiremos una función de middleware, timeLog, que arrojará la hora en que se solicitó la ruta respectiva.

birds.js:

En main.js:

var birds = require('./birds')
app.use('/birds', birds) //handle /birds and /birds/about

Utiliza el comando node para ejecutar el código, luego utiliza cURL así:

Salida de laside window
Salida de la ventana del lado del servidor
.side window

Así, es posible en express.Router ejecutar sólo funciones de middleware en rutas específicas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *